// vector 是将元素置于一个动态数组中加以管理的容器。
vector 可以随机存取元素(支持索引值直接存取, 用[]操作符或 at()方法, 这个等下
会详讲)。
vector 尾部添加或移除元素非常快速。 但是在中部或头部插入元素或移除元素比较费时
#include"iostream" #include"vector" using namespace std; /*初始化*/ int main01() { //无参数 vector<T>vecT std::vector<int>(); std::vector<float>vec_a1; std::vector<string>vec_a;//尖括号内可以是基本类型和自定义类型 //带参数 std::vector<int>(3,9);//存放3个9, vector(int size, const T&t); int a[] = { 1, 2, 3, 4, 5 }; vector<int>vec_a2(a, a + 4); vector<int>vec_a3(vec_a2.begin(), vec_a2.end()); vector<int>vec_a4(vec_a2.begin(), vec_a2.begin() + 3); vector<int>vec_a5(vec_a2); //copy构造函数 //vector<int>(const vector &t); return 0; } /////////////////赋值(数组,插入)及遍历(数组)(引用)(迭代器)///////////////////// /* vector.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身。 注意该区间 是左闭右开的区间。 vector.assign(n,elem); //将 n 个 elem 拷贝赋值给本身。 vector& operator=(const vector &vec); //重载等号操作符 vector.swap(vec); // 将 vec 与本身的元素互换。 */ int main02() { int a[5] = { 1, 2, 3, 4, 5 }; vector<int>vec_a1 (a, a + 5); vector<int>vec_a2(3, 9);//9,9,9 vec_a2 = vec_a1; cout << "vec_a2: "; for (int i = 0; i < vec_a1.size(); i++) //通过数组方式遍历1 { cout << vec_a2[i] << " "; //1,2,3,4,5 } cout << endl; vector<int>vec_a3(vec_a1.begin(), vec_a1.end());//区间赋值 cout << "数组遍历1: "; for (int i = 0; i < vec_a1.size(); i++) //通过数组方式遍历1 { cout << vec_a1[i] << " "; //1,2,3,4,5 } cout << endl; cout << "引用遍历2: "; for (int i = 0; i < vec_a1.size(); i++) //通过引用方式遍历2 { int &vec = vec_a1.at(i); cout << vec << " "; //1,2,3,4,5 } cout << endl; cout << "迭代器遍历3: "; vector<int>::iterator it = vec_a1.begin(); while(it!=vec_a1.end())//通过引用方式遍历2 { cout << *it<< " "; //1,2,3,4,5 it++; } cout << endl; return 0; } //////////////////////////*大小,头部元素,尾部元素,修改头部元素*////////////////////////// int main03() { vector<int>a1; a1.push_back(1); //在尾部插入元素 a1.push_back(2); a1.push_back(3); cout << a1.size() << endl; //3 vector容器大小 a1.front() = 100; //改变头部元素 a1.back() = 0; //改变尾部元素 //a1[1] = 10; //修改第二个元素(数组1) //int &m = a1.at(1);//修改第二个元素(引用2) //m = 10; vector<int>::iterator it1 = a1.begin() + 1;//修改第二个元素(迭代2) *it1 = 50; for (int i = 0; i < a1.size(); i++) //通过数组方式遍历1 { cout << a1[i] << " "; //100,2,3 } cout << endl; a1.pop_back(); //删除尾部元素 a1.pop_back(); cout << a1.size() << endl; //1 return 0; } /////////////////////////////插入与删除(eraser和insert)/////////////////////////////// int main04() { //插入元素(insert) /*理论知识 vector.insert(pos, elem); //在 pos 位置插入一个 elem 元素的拷贝, 返回新数据的位置。 vector.insert(pos, n, elem); //在 pos 位置插入 n 个 elem 数据, 无返回值。 vector.insert(pos, beg, end); //在 pos 位置插入[beg,end)区间的数据, 无返回值 */ int a[5] = { 1, 2, 3, 4, 5 }; vector<int>vect_a1(a,a+5); vector<int>vect_a2(3,9);//9,9,9 vect_a1.insert(vect_a1.begin (),100);//头插入//100,1, 2, 3, 4, 5 vect_a1.insert(vect_a1.end (),100); //尾插入//100,1, 2, 3, 4, 5,100 vect_a1.insert(vect_a1.begin ()+2,200);//在第三个位置插入//100,1,200, 2, 3, 4, 5,100 vect_a1.insert(vect_a1.begin(), vect_a2.begin(), vect_a2.end());//9,9,9,100,1,200, 2, 3, 4, 5,100 for (vector<int>::iterator it = vect_a1.begin(); it != vect_a1.end(); it++) { cout << *it << " "; } cout << endl; //删除元素(erase) /*理论知识 vector.clear(); //移除容器的所有数据 vec.erase(beg,end); //删除[beg,end)区间的数据, 返回下一个数据的位置。 vec.erase(pos); //删除 pos 位置的数据, 返回下一个数据的位置。 */ //删除999 vect_a1.erase(vect_a1.begin(),vect_a1.begin ()+3); for (vector<int>::iterator it = vect_a1.begin(); it != vect_a1.end(); it++) { cout << *it << " "; //100,1,200, 2, 3, 4, 5,100 } cout << endl; //删除所有的100; for (vector<int>::iterator it = vect_a1.begin(); it != vect_a1.end();) { if (*it == 100) it=vect_a1.erase(it); else it++; } for (vector<int>::iterator it1 = vect_a1.begin(); it1 != vect_a1.end(); it1++) { cout << *it1 << " "; //1,200, 2, 3, 4, 5 } cout << endl; //删除200; vect_a1.erase(vect_a1.begin()+1); for (vector<int>::iterator it1 = vect_a1.begin(); it1 != vect_a1.end(); it1++) { cout << *it1 << " "; //1, 2, 3, 4, 5 } cout << endl; //清空容器; vect_a1.clear(); cout << "clear后容器大小:" << vect_a1.size() << endl;//0 return 0; } int main() { main01();//初始化 main02();//赋值(数组,插入)及遍历(数组)(引用)(迭代器) main03();//大小,头部元素,尾部元素,修改头部元素,尾部元素 main04();//元素的插入与删除 system("pause"); return 0; }