真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++學習筆記——STL-創(chuàng)新互聯(lián)

視頻:黑馬程序員

創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設、網(wǎng)絡營銷策劃、小程序開發(fā)、電子商務建設、網(wǎng)絡推廣、移動互聯(lián)開發(fā)、研究、服務為一體的技術型公司。公司成立十年以來,已經(jīng)為上1000家花箱各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務。現(xiàn)在,服務的上1000家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。文章目錄
    • STL 初識
      • STL 的誕生
      • STL 基本概念
      • STL 六大組件
      • STL 中容器、算法、迭代器
      • 容器算法迭代器初識
        • vector 存放內(nèi)置數(shù)據(jù)類型
        • Vector存放自定義數(shù)據(jù)類型
        • Vector容器嵌套容器
    • STL- 常用容器
      • string 容器
        • string 基本概念
        • string構造函數(shù)
        • string賦值操作

STL 初識 STL 的誕生
  • 長久以來,軟件界一直希望建立一種可重復利用的東西
  • C++的面向?qū)ο蠛头盒途幊趟枷耄康木褪菑陀眯缘奶嵘?/li>
  • 大多數(shù)情況下,數(shù)據(jù)結(jié)構和算法都未能有一套標準,導致被迫從事大量重復工作
  • 為了建立數(shù)據(jù)結(jié)構和算法的一套標準,誕生了STL
STL 基本概念
  • STL(Standard Template Library,標準模板庫)
  • STL 從廣義上分為:容器(container) 算法(algorithm) 迭代器(iterator)
  • 容器和算法之間通過迭代器進行無縫銜接
  • STL 幾乎所有的代碼都采用了模板類或者模板函數(shù)
STL 六大組件

STL 大體分為六大組件,分別是:容器、算法、迭代器、仿函數(shù)、適配器(配接器)、空間配置器

  1. 容器:各種數(shù)據(jù)結(jié)構,如vector、list、deque、set、map等,用來存放數(shù)據(jù)
  2. 算法:各種常用的算法,如sort、find、copy、for_each等
  3. 迭代器:扮演了容器與算法之間的膠合劑
  4. 仿函數(shù):行為類似函數(shù),可作為算法的某種策略。
  5. 適配器:一種用來修飾容器或者仿函數(shù)或迭代器接口的東西。
  6. 空間配置器:負責空間的配置與管理
STL 中容器、算法、迭代器

容器:置物之所也

STL容器就是將運用最廣泛的一些數(shù)據(jù)結(jié)構實現(xiàn)出來

常用的數(shù)據(jù)結(jié)構:數(shù)組, 鏈表,樹, 棧, 隊列, 集合, 映射表 等

這些容器分為序列式容器和關聯(lián)式容器兩種:

?序列式容器:強調(diào)值的排序,序列式容器中的每個元素均有固定的位置。
關聯(lián)式容器:二叉樹結(jié)構,各元素之間沒有嚴格的物理上的順序關系。

簡單理解:
序列式容器 怎么放就怎么顯示
關聯(lián)式容器 放了之后,可能會排序之后再顯示

算法:問題之解法也

有限的步驟,解決邏輯或數(shù)學上的問題,這一門學科我們叫做算法(Algorithms)

算法分為:質(zhì)變算法和非質(zhì)變算法。

質(zhì)變算法:是指運算過程中會更改區(qū)間內(nèi)的元素的內(nèi)容。例如拷貝,替換,刪除等等

非質(zhì)變算法:是指運算過程中不會更改區(qū)間內(nèi)的元素內(nèi)容,例如查找、計數(shù)、遍歷、尋找極值等等

迭代器:容器和算法之間粘合劑

提供一種方法,使之能夠依序?qū)ぴL某個容器所含的各個元素,而又無需暴露該容器的內(nèi)部表示方式。

每個容器都有自己專屬的迭代器

迭代器使用非常類似于指針,初學階段我們可以先理解迭代器為指針

迭代器種類:

種類功能支持運算
輸入迭代器對數(shù)據(jù)的只讀訪問只讀,支持++、==、!=
輸出迭代器對數(shù)據(jù)的只寫訪問只寫,支持++
前向迭代器讀寫操作,并能向前推進迭代器讀寫,支持++、==、!=
雙向迭代器讀寫操作,并能向前和向后操作讀寫,支持++、–,
隨機訪問迭代器讀寫操作,可以以跳躍的方式訪問任意數(shù)據(jù),功能最強的迭代器讀寫,支持++、–、[n]、-n、<、<=、>、>=

常用的容器中迭代器種類為雙向迭代器,和隨機訪問迭代器

容器算法迭代器初識

了解STL中容器、算法、迭代器概念之后,我們利用代碼感受STL的魅力

STL中最常用的容器為Vector,可以理解為數(shù)組,下面我們將學習如何向這個容器中插入數(shù)據(jù)、并遍歷這個容器

vector 存放內(nèi)置數(shù)據(jù)類型

容器:vector

算法:for_each

迭代器:vector::iterator

對于vector不理解,可以去復習類模板,一個應用案例供理解

示例:

#include#include 
using namespace std;

void MyPrint(int val)
{cout<< val<< endl;
}

void test01() {//創(chuàng)建vector容器對象,并且通過模板參數(shù)指定容器中存放的數(shù)據(jù)的類型
	vectorv;
	//向容器中放數(shù)據(jù)
	v.push_back(10);
	v.push_back(20);
	v.push_back(30);
	v.push_back(40);

	//每一個容器都有自己的迭代器,迭代器是用來遍歷容器中的元素
	//v.begin()返回迭代器,這個迭代器指向容器中第一個數(shù)據(jù)
	//v.end()返回迭代器,這個迭代器指向容器元素的最后一個元素的下一個位置
	//vector::iterator 拿到vector這種容器的迭代器類型

	vector::iterator pBegin = v.begin();
	vector::iterator pEnd = v.end();

	//第一種遍歷方式:
	while (pBegin != pEnd) {cout<< *pBegin<< endl;
		pBegin++;
	}

	
	//第二種遍歷方式: 可以直接用 auto 關鍵字聲明 it
	for (vector::iterator it = v.begin(); it != v.end(); it++) {cout<< *it<< endl;
	}
	cout<< endl;

	//第三種遍歷方式:
	//使用STL提供標準遍歷算法  頭文件 algorithm
	for_each(v.begin(), v.end(), MyPrint);
}

int main() {test01();

	system("pause");

	return 0;
}
Vector存放自定義數(shù)據(jù)類型

學習目標:vector中存放自定義數(shù)據(jù)類型,并打印輸出

示例:

#include#include#includeusing namespace std;

//自定義數(shù)據(jù)類型
class Person {public:
	Person(string name, int age) {mName = name;
		mAge = age;
	}
public:
	string mName;
	int mAge;
};
//存放對象
void test01() {vectorv;

	//創(chuàng)建數(shù)據(jù)
	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	Person p5("eee", 50);

	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);
	v.push_back(p5);

	for (vector::iterator it = v.begin(); it != v.end(); it++) {cout<< "Name:"<< (*it).mName<< " Age:"<< (*it).mAge<< endl;

	}
}


//放對象指針
void test02() {vectorv;

	//創(chuàng)建數(shù)據(jù)
	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	Person p5("eee", 50);

	v.push_back(&p1);
	v.push_back(&p2);
	v.push_back(&p3);
	v.push_back(&p4);
	v.push_back(&p5);

	// * 解引用,解出尖括號內(nèi)的類型,即Person*(Person的指針)
	for (vector::iterator it = v.begin(); it != v.end(); it++) {Person * p = (*it);
		cout<< "Name:"<< p->mName<< " Age:"<< (*it)->mAge<< endl;
	}
}


int main() {test01();
    
	test02();

	system("pause");

	return 0;
}
Vector容器嵌套容器

學習目標:容器中嵌套容器,我們將所有數(shù)據(jù)進行遍歷輸出

示例:

#include#includeusing namespace std;

//容器嵌套容器
void test01() {vector< vector>v;

	vectorv1;
	vectorv2;
	vectorv3;
	vectorv4;

	for (int i = 0; i< 4; i++) {v1.push_back(i + 1);
		v2.push_back(i + 2);
		v3.push_back(i + 3);
		v4.push_back(i + 4);
	}

	//將容器元素插入到vector v中
	v.push_back(v1);
	v.push_back(v2);
	v.push_back(v3);
	v.push_back(v4);

	// for (auto & it : v)
	for (vector>::iterator it = v.begin(); it != v.end(); it++) {// for (int & vit : it)
		for (vector::iterator vit = (*it).begin(); vit != (*it).end(); vit++) {	cout<< *vit<< " ";
		}
		cout<< endl;
	}

}

int main() {test01();

	system("pause");

	return 0;
}
STL- 常用容器 string 容器 string 基本概念

本質(zhì):

  • string是C++風格的字符串,而string本質(zhì)上是一個類

string和char * 區(qū)別:

  • char * 是一個指針
  • string是一個類,類內(nèi)部封裝了char*,管理這個字符串,是一個char*型的容器。

特點:

string 類內(nèi)部封裝了很多成員方法

例如:查找find,拷貝copy,刪除delete 替換replace,插入insert

string管理char*所分配的內(nèi)存,不用擔心復制越界和取值越界等,由類內(nèi)部進行負責

string構造函數(shù)

構造函數(shù)原型:

  • string();//創(chuàng)建一個空的字符串 例如: string str;
    string(const char* s);//使用字符串s初始化
  • string(const string& str);//使用一個string對象初始化另一個string對象
  • string(int n, char c);//使用n個字符c初始化

示例:

#include//string構造
void test01()
{string s1; //創(chuàng)建空字符串,調(diào)用無參構造函數(shù)
	cout<< "str1 = "<< s1<< endl;

	const char* str = "hello world";
	string s2(str); //把c_string轉(zhuǎn)換成了string

	cout<< "str2 = "<< s2<< endl;

	string s3(s2); //調(diào)用拷貝構造函數(shù)
	cout<< "str3 = "<< s3<< endl;

	string s4(10, 'a');
	cout<< "str3 = "<< s3<< endl;
}

int main() {test01();

	system("pause");

	return 0;
}

總結(jié):string的多種構造方式?jīng)]有可比性,靈活使用即可

Why copy constructor argument should be const in C++?

string賦值操作

功能描述:

  • 給string字符串進行賦值

賦值的函數(shù)原型:

  • string& operator=(const char* s);//char*類型字符串 賦值給當前的字符串
  • string& operator=(const string &s);//把字符串s賦給當前的字符串
  • string& operator=(char c);//字符賦值給當前的字符串
  • string& assign(const char *s);//把字符串s賦給當前的字符串
  • string& assign(const char *s, int n);//把字符串s的前n個字符賦給當前的字符串
  • string& assign(const string &s);//把字符串s賦給當前字符串
  • string& assign(int n, char c);//用n個字符c賦給當前字符串

示例:

//賦值
void test01()
{string str1;
	str1 = "hello world";
	cout<< "str1 = "<< str1<< endl;

	string str2;
	str2 = str1;
	cout<< "str2 = "<< str2<< endl;

	string str3;
	str3 = 'a';
	cout<< "str3 = "<< str3<< endl;

	string str4;
	str4.assign("hello c++");
	cout<< "str4 = "<< str4<< endl;

	string str5;
	str5.assign("hello c++",5);
	cout<< "str5 = "<< str5<< endl;


	string str6;
	str6.assign(str5);
	cout<< "str6 = "<< str6<< endl;

	string str7;
	str7.assign(5, 'x');
	cout<< "str7 = "<< str7<< endl;
}

int main() {test01();

	system("pause");

	return 0;
}

總結(jié):

? string的賦值方式很多,operator=這種方式是比較實用的

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


當前名稱:C++學習筆記——STL-創(chuàng)新互聯(lián)
本文URL:http://weahome.cn/article/eeodi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部