順序容器操作2

2021-07-05 06:47:48 字數 4272 閱讀 3088

容器插入

list

::iterator iter = slist.begin();

++iter;

++iter;

iter = slist.insert(iter, "----");//插入1

cout

<< *iter << endl;

for(list

::iterator i = slist.begin();

i != slist.end(); ++i)

cout

<< *i << " ";

cout

<< endl;

string sarray[4] = ;

slist.insert(slist.end(), sarray+1, sarray+3); //插入2

for(list

::iterator i = slist.begin();

i != slist.end(); ++i)

cout

<< *i << " ";

cout

<< endl;

slist.insert(slist.begin(), 4, "hello"); //插入3

for(list

::iterator i = slist.begin();

i != slist.end(); ++i)

cout

<< *i << " ";

cout

<< endl;

1- slist.insert(iter, key)在迭代器iter位置插入元素key,返回插入元素key的位置

2-slist.insert(iter, iter1, iter2)在迭代器iter所指示位置,插入迭代器範圍[iter1,iter2)之間的元素副本,範圍void

3-slist.insert(iter, n, key)在迭代器iter位置處插入n個值為key的元素,範圍void

注意:新增元素會使原來迭代器失效,所以需要更新的容器的迭代器也要更新,如下:

vector

::iterator ibeg = a.begin();

vector

::iterator iend = a.end();

while(ibeg != iend)

vector

::iterator ibeg = a.begin();

while(ibeg != a.end())

容器大小操作

#include

#include

#include

#include

using

namespace

std;

int main()

a.size() 容器的大小,返回size_type

a.max_size(); 容器最大能容納的數量,返回size_type

a.empty(); 判斷容器為空

a.resize(n);重置容器大小

a.resize(n, default);重置容器大小,新新增的元素值都為default

注意:resize可能使迭代器失效,適用vector,list, deque

容器訪問

vector

ivec;

ivec.push_back(10);

ivec.push_back(20);

ivec.push_back(30);

cout

<< ivec.front() << endl;//第乙個元素,10

cout

<< ivec.back() << endl;//最後乙個元素,30

vector

::reference a = ivec.front();//返回引用

vector

::reference b = ivec.back();//返回引用

cout

<< a << endl;

cout

<< b << endl;

cout

<< *ivec.begin() << endl;//迭代器訪問第乙個元素,10

cout

<< *(--ivec.end()) << endl;//迭代器訪問最後元素,30

vector

::reference c = *ivec.begin();//迭代器也可以返回引用

vector

::reference d = *--ivec.end();

cout

<< c << endl;

cout

<< d << endl;

cout

<< ivec[0] << endl;//下標訪問

cout

<< ivec[1] << endl;

cout

<< ivec[2] << endl;

cout

<< ivec[300] << endl; //越界,嚴重錯誤,只能終止程式

cout

<< ivec.at(0) << endl;//at(n)下標訪問

cout

<< ivec.at(1) << endl;

cout

<< ivec.at(2) << endl;

try catch(out_of_range)

list

ilist;

if(!ilist.empty())

//cout << ilist[0] << endl; 鍊錶沒有下標,不能用下標訪問

//cout << ilist.at(0) << endl;

注意:vector , deque有下標訪問,list沒有

容器刪除

c.erase(iter);刪除迭代器iter指向的元素,返回被刪除元素的後面乙個元素迭代器

c.erase(iter1, iter2);刪除迭代器範圍內的元素,返回刪除的後面乙個元素迭代器

c.clear();清除所有容器,返回void

c.pop_back();刪除最後乙個,返回void

c.pop_front();刪除第乙個,返回void,適用於deque和list

容器賦值和交換

c1 = c2 容器賦值,型別必須相同

vector

ivec1;

vector

ivec2;

ivec1.push_back(10);

ivec1.push_back(20);

ivec1.push_back(30);

ivec2 = ivec1;

for(vector

::iterator iter = ivec2.begin();

iter != ivec2.end(); ++iter)

cout

<< *iter << " "; //10,20,30

c1.swap(c2) c1和c2交換元素,元素型別相同

vector

ivec1;//10,20,30

vector

ivec2;//1,2,3,4

ivec1.push_back(10);

ivec1.push_back(20);

ivec1.push_back(30);

ivec2.push_back(1);

ivec2.push_back(2);

ivec2.push_back(3);

ivec2.push_back(4);

ivec2.swap(ivec1);//ivec2-10,20,30;ivec1-1,2,3,4

c.assign(iter1, iter2)將迭代器範圍內元素複製到c中,元素型別相容,容器型別可以不同

ivec2.assign(++ivec1.begin(), ivec1.end());

for(vector

::iterator iter = ivec2.begin();

iter != ivec2.end(); ++iter)

cout

<< *iter << " ";//20,30

c.assign(n,key) 將容器重新設定儲存n個值為key的元素

順序容器2

include include include include include 容器元素都是副本 using namespace std int main list iterator it slist.begin cout it endl it cout it endl slist.insert i...

(52)順序容器操作

順序容器與關聯容器的不同之處在於兩者組織元素的方式。除了array之外,所有標準庫容器都提供了靈活的記憶體管理。在執行時可以動態新增或刪除元素來改變容器的大小。除array和forward list之外,每個順序容器 包括string型別 都支援push back。容器元素是拷貝 當我們用乙個物件來...

9 3 順序容器操作

9.3.2 訪問元素 順序容器提供了4種訪問元素的方式 c.front c.back c n c.at n 對於儲存空間連續的容器 vector string deque和array 來說,這4中方式都可以用,可以通過front和back獲得首 尾元素,也可以通過下標運算子和at成員函式訪問任意位置...