C++之vector容器初學(二)——插入和刪除
插入操作:
理論知識
² vector.insert(pos,elem); //在pos位置插入一個elem元素的拷貝,返回新資料的位置。
² vector.insert(pos,n,elem); //在pos位置插入n個elem資料,無返回值。
² vector.insert(pos,beg,end); //在pos位置插入[beg,end)區間的資料,無返回值
簡單案例
vector<int> vecA;
vector<int> vecB;
vecA.push_back(1);
vecA.push_back(3);
vecA.push_back(5);
vecA.push_back(7);
vecA.push_back(9);
vecB.push_back(2);
vecB.push_back(4);
vecB.push_back(6);
vecB.push_back(8);
vecA.insert(vecA.begin(), 11); //{11, 1, 3, 5, 7, 9}
vecA.insert(vecA.begin()+1,2,33); //{11,33,33,1,3,5,7,9}
vecA.insert(vecA.begin() , vecB.begin() , vecB.end() ); //{2,4,6,8,11,33,33,1,3,5,7,9}
測試程式碼:
#include <iostream> using namespace std; #include "vector" void printV(vector<int> &v) { for (int i = 0; i < v.size();i++) { cout <<v[i]<< " "; } cout << endl; } //插入操作 void main1() { vector<int> v1; v1.insert(v1.begin(),1);//在開始位置插入元素1 printV(v1); v1.insert(v1.begin(),2,33);//在開始位置插入兩個33 printV(v1); v1.insert(v1.begin(),v1.begin(),v1.end());//在開始位置插入整個區間元素 printV(v1); } int main() { cout << "插入操作:" << endl; main1(); return 0; }
vector的刪除
理論知識
² vector.clear(); //移除容器的所有資料
² vec.erase(beg,end); //刪除[beg,end)區間的資料,返回下一個資料的位置。
² vec.erase(pos); //刪除pos位置的資料,返回下一個資料的位置。
簡單案例:
刪除區間內的元素
vecInt是用vector<int>宣告的容器,現已包含按順序的1,3,5,6,9元素。
vector<int>::iterator itBegin=vecInt.begin()+1;
vector<int>::iterator itEnd=vecInt.begin()+2;
vecInt.erase(itBegin,itEnd);
//此時容器vecInt包含按順序的1,6,9三個元素。
假設 vecInt 包含1,3,2,3,3,3,4,3,5,3,刪除容器中等於3的元素
for(vector<int>::iterator it=vecInt.being(); it!=vecInt.end(); ) //小括號裡不需寫 ++it
{
if(*it == 3)
{
it = vecInt.erase(it); //以迭代器為引數,刪除元素3,並把資料刪除後的下一個元素位置返回給迭代器。
//此時,不執行 ++it;
}
else
{
++it;
}
}
//刪除vecInt的所有元素
vecInt.clear(); //容器為空
測試程式碼:
#include <iostream>
using namespace std;
#include "vector"
void printV(vector<int> &v)
{
for (int i = 0; i < v.size();i++)
{
cout <<v[i]<< " ";
}
cout << endl;
}
//刪除操作
void main2()
{
vector<int> v1(10);
for (int i = 0; i < v1.size(); i++)
{
v1[i] = i + 1;
}
printV(v1);
v1.erase(v1.begin(),v1.begin()+4);//區間刪除
printV(v1);
v1.erase(v1.begin());//頭部刪除
printV(v1);
v1[0] = 23;
v1[1] = 22;
printV(v1);
for (vector<int>::iterator it = v1.begin(); it != v1.end();)//刪除容器裡等於8的元素
{
if (*it == 8)
{
it = v1.erase(it);
}
else
it++;
}
printV(v1);
}
int main()
{
cout << "刪除操作:" << endl;
main2();
return 0;
}