柚子快報激活碼778899分享:開發(fā)語言 C++之順序容器
柚子快報激活碼778899分享:開發(fā)語言 C++之順序容器
這篇文章可以幫助大家快速了解C嘎嘎中的順序容器知識,幫助大家更快速輕松的寫代碼
本篇文章只講解了順序容器各種操作的使用,沒有深挖,這篇只是幫助博主來記憶以及隨時查找忘記的內(nèi)容。
目錄
一、順序容器類型
二、順序容器操作
1.容器的定義和初始化操作
2.賦值和swap操作
3.添加元素操作
4.訪問元素操作
5.刪除元素操作
6.改變?nèi)萜鞔笮〔僮?/p>
三、額外的string操作
1.substr操作
2.string搜索的操作
四、總結(jié)
一、順序容器類型
vector可變大小數(shù)組。支持快速隨機(jī)訪問。在尾部之外的位置插入或刪除元素可能很慢。deque雙端隊列。支持快速隨機(jī)訪問。在頭尾位置插入/刪除速度很快。list雙向鏈表。只支持雙向順序訪問。在 list 中任何位置進(jìn)行插入刪除操作速度都很快。forward_list單向鏈表。只支持單項順序訪問。在鏈表任何位置進(jìn)行插入/刪除操作速度都很快。array固定大小數(shù)組。支持快速隨機(jī)訪問。不能添加或刪除元素。string 與 vector 相似的容器,但專門用于保存字符。隨機(jī)訪問快。在尾部插入/刪除速度?
二、順序容器操作
1.容器的定義和初始化操作
C
/*
vector
vector(v.begin(), v.end()); //將v[begin(), end())區(qū)間中的元素拷貝給本身
vector(n, elem); //構(gòu)造函數(shù)將n個elem拷貝給本身。
vector(const vector& vec); //拷貝構(gòu)造函數(shù)。
*/
void print(vector
{
for (vector
{
cout << *it << " ";
}
cout << endl;
}
void test()
{
vector
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
print(v1);
vector
print(v2);
vector
print(v3);
vector
print(v5);
}
/*
運(yùn)行結(jié)果
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9
100 100 100 100
100 100 100 100
*/
2.賦值和swap操作
C
void print(vector
{
for (vector
{
cout << *it << " ";
}
cout << endl;
}
void test()
{
vector
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
print(v1);
vector
swap(v1, v2);
print(v1);
vector
v3.assign(v1.begin(), v1.end());
print(v3);
v3.assign(5, 10);
print(v3);
}
/*
運(yùn)行結(jié)果
0 1 2 3 4 5 6 7 8 9
5 2 1 1 3 1 4
5 2 1 1 3 1 4
10 10 10 10 10
*/
3.添加元素操作
這些操作會改變?nèi)萜鞯牡拇笮?;array不支持這些操作forward_list有自己專有版本的insert和emplace;forward_list不支持push_back和emplace_back;vector和string不支持push_front和emplace_front; c.push_back(t) c.emplace_back(args) 在c的尾部創(chuàng)建一個值為t或由args創(chuàng)建的元素。返回void。push_back創(chuàng)建一個局部臨時對象,將其壓入容器,而emplace_back是在內(nèi)存空間中直接創(chuàng)建對象,性能更優(yōu)。 c.push_front(t) c.emplace_front(args) 在c的頭部創(chuàng)建一個值為t或由args創(chuàng)建的元素。返回void。 c.insert(p,t) c.insert(p,args) 在迭代器p指向的元素之前創(chuàng)建一個值為t或由args創(chuàng)建的元素。返回指向新添加的元素的迭代器。c.insert(p,n,t)在迭代器p指向的元素之前插入n個值為t的元素。返回指向新添加的第一個元素的迭代器;若n為0,則返回p。c.insert(p,b,e)將迭代器b和e指定范圍內(nèi)的元素插入到迭代器p指向的元素之前。b和e不能指向c中的元素。返回指向新添加的第一個元素的迭代器;若范圍為空,則返回p。c.insert(p,il)il是一個花括號包圍的元素值列表。將這些給定值插入到迭代器p指向前的元素之前。返回指向新添加的第一個元素的迭代器;若列表為空,則返回p。
4.訪問元素操作
這些操作的返回值類型全部為c內(nèi)元素的類型,如:int,string等。不返回一個迭代器。訪問成員函數(shù)返回的是一個引用。at和下標(biāo)操作只適用于string,vector,deque和array。back不適用于forward_list。c.back()返回c中尾元素的引用。若c為空,函數(shù)行為未定義。c.front()返回c中首元素的引用。若c為空,函數(shù)行為未定義。c[n]返回c中下標(biāo)為n的元素的引用,n是一個無符號整數(shù)。若n>=c.size(),則函數(shù)行為未定義。c.at(n)返回下標(biāo)為n的元素的引用。如果下標(biāo)越界,則拋出一out_of_range異常。
void test()
{
vector
cout << "最后一個元素為:" << v.back() << endl;
cout << "第一個元素為:" << v.front() << endl;
cout << v.at(3) << endl;
cout << v[3] << endl;
}
/*
最后一個元素為:4
第一個元素為:5
1
1
*/
5.刪除元素操作
forward_list有特殊版本的 erase。forward_list不支持pop_back; vector和string不支持pop_front。c.pop_back()刪除c中尾元素。若c為空,則函數(shù)行為未定義。函數(shù)返回void。c.pop_front()刪除c中首元素。若c為空,則函數(shù)行為未定義。函數(shù)返回 void。c.erase(p)刪除迭代器p所指定的元素,返回一個指向被刪元素之后元素的迭代器,若p指向尾元素,則返回尾后(off-the-end)迭代器。若p是尾后迭代器,則函數(shù)行為未定義。c.erase(b,e)刪除迭代器b和e所指定范圍內(nèi)的元素。返回一個指向最后一個被刪元素之后元素的迭代器,若e本身就是尾后迭代器,則函數(shù)也返回尾后迭代器。c.clear()刪除c中的所有元素。返回void。
刪除元素的成員函數(shù)并不檢查其參數(shù)。在刪除元素之前,必須保證它們是存在的。
6.改變?nèi)萜鞔笮〔僮?/p>
resize不適用于arrayc.resize(n)調(diào)整c的大小為n個元素。若n 三、額外的string操作 1.substr操作 string ss.substr(pos,n)返回一個string,包含s中從pos開始的n個字符的拷貝。pos的默認(rèn)值為0。n的默認(rèn)值為s.size()-pos,即拷貝從pos開始的所有字符。 void test() { string s{ "hello world" }; cout << s.substr(0, 5) << endl;//hello cout << s.substr(6, 11) << endl;//world } 2.string搜索的操作 搜索操作返回指定字符出現(xiàn)的下標(biāo),如果未找到則返回 npos。s.find(args)查找s中args 第一次出現(xiàn)的位置。s.rfind(args)查找s中args 最后一次出現(xiàn)的位置。s.find_first_of(args )在s中查找args中任何一個字符第一次出現(xiàn)的位置。s.find_last_of(args )在s中查找args中任何一個字符最后一次出現(xiàn)的位置。s.find_first_not_of(args )在s中查找第一個不在args中的字符。s.find_last_not_of(args )在s中查找最后一個不在args中的字符。args 必須是以下形式之一。c,pos從s中位置pos開始查找字符?c。pos 默認(rèn)為 0。s2,pos從s2中位置pos開始查找字符串 s2。pos 默認(rèn)為 0。cp,pos?從s中位置 pos 開始查找指針 cp 指向的以空字符串結(jié)尾的C風(fēng)格字符串。pos 默認(rèn)為 0。cp,pos,n從s中位置 pos 開始查找指針 cp 指向的數(shù)組的前n個字符。pos和n無默認(rèn)值。 //以第一個成員函數(shù)舉例,其他都一樣。 void test() { string s{ "hello world" }; const char* cp = "world"; //"world":指針 cp 指向的以空字符串結(jié)尾的C風(fēng)格字符串 cout << s.find('l') << endl; //2 cout << s.find('l', 3) << endl; //3 cout << s.find(cp, 0) << endl; //6 cout << s.find(cp, 3, 2); //6 } 四、總結(jié) 以上就是我們平時做題或者寫項目常用的成員函數(shù)。覺得不錯的請關(guān)注+收藏+點(diǎn)贊歐,剛開始一下子是記不住的,一定要多寫題多用才能徹底記住。 柚子快報激活碼778899分享:開發(fā)語言 C++之順序容器 相關(guān)文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。