容器插入
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成員函式訪問任意位置...