1.vector容器元素的初始化方式: 1.1. vector<T> c; 创建一个名为c的空容器,容器中元素的类型为T 1.2. vector<T> c2(c); 创建容器c的副本c2,c和c2必须具有相同的容器类型和元素类型 1.3. vector<T> c(n); 创建有n个元素的容器c,每个元素的初始化由标准库自动执行 1.4. vector<T> c(n,t); 用n个值为t的元素创建容器c 1.5. vector<T> c(b,e); 创建容器c,其元素是迭代器b和e标示的范围内元素的副本 1.6. 程序中的第六种初始化方式其实与第五种初始化方式实质是一样的。因为指针就是迭代器! vector容器元素的初始化方式代码实现:
#include<iostream> #include<vector> using namespace std; int main(void) { vector<int>::iterator iter; vector<int> ivec1; //第一种初始化方式:创建一个空的vector for (int i = 1; i != 5; ++i) { ivec1.push_back(i); } cout << "第一种初始化方式:创建一个空的vector。其输出结果为:" << endl; for (iter = ivec1.begin(); iter != ivec1.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; vector<int> ivec2(ivec1);//第二种初始化方式:创建容器ivec1的副本ivec2 cout << "第二种初始化方式:创建容器ivec1的副本ivec2" << endl; for (iter = ivec2.begin(); iter != ivec2.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; vector<int> ivec3(4);//第三种初始化方式:创建一个有4个元素的容器,不指定元素的初始化式,由标准库自动对其进行初始化 cout << "第三种初始化方式:创建一个有4个元素的容器,不指定元素的初始化式,由标准库自动对其进行初始化" << endl; for (iter = ivec3.begin(); iter != ivec3.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; vector<int> ivec4(4, 1);//第四种初始化方式:用4个值为1的元素创建容器ivec4 cout << "第四种初始化方式:用4个值为1的元素创建容器ivec4" << endl; for (iter = ivec4.begin(); iter != ivec4.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; vector<int> ivec5(ivec1.begin(), ivec1.end() - 1);//第五种初始化方式:创建容器ivec5,其元素是由一对迭代器标示的范围内的副本 cout << "第五种初始化方式:创建容器ivec5,其元素是由一对迭代器标示的范围内的副本" << endl; for (iter = ivec5.begin(); iter != ivec5.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; int a[] = { 6, 7, 8, 9, 10, 11 }; vector<int> ivec6(a, a + 6);//第六种初始化方式:创建容器ivec6,初始化为一段元素的副本 cout << "第六种初始化方式:创建容器ivec6,初始化为一段元素的副本" << endl; for (iter = ivec6.begin(); iter != ivec6.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; system("pause"); return 0; }
2.vector容器中常用的函数操作: 1.在vector容器中添加元素的操作: 1.1 c.push_back(t); 在容器c的尾部添加值为t的元素 1.2 c.insert(p,t); 在迭代器p所指向的元素前面插入值为t的新元素,返回指向新添加元素的迭代器 1.3 c.insert(p,n,t); 在迭代器p所指向的元素前面插入n个值为t的新元素。返回void类型 1.4 c.insert(p,b,e); 在迭代器p所指向的元素前面插入有迭代器b和e标记的范围内的元素。返回void类型 2.vector容器大小的操作: 2.1 c.size(); 返回容器c中的元素个数 2.2 c.empty(); 如果容器c为空,则返回true,否则返回false 3.访问容器中元素的操作: 3.1 c.back(); 返回容器c的最后一个元素的引用。如果c为空,则该操作无定义。 3.2 c.front(); 返回容器c的第一个元素的引用。 如果c为空,则该操作无定义。 3.3 c[n]; 返回下标为n的元素的引用。 3.4 c.at(n); 返回下标为n的元素的引用。 4.删除容器中的元素的操作: 4.1 c.erase(p); 删除迭代器p所指向的元素,返回一个迭代器,它指向被删除元素的后面的元素。 4.2 c.erase(b,e); 删除迭代器b和e所标记的范围内的所有元素,返回一个迭代器,它指向被删除元素段后面的元素。 4.3 c.clear(); 删除容器c内的所有元素。返回void 4.4 删除容器内指定的一个元素:我们必须先在容器中找到要删除的元素,然后再调用erase进行删除操作!寻找一个指定的元素使用的是标准库的find算法,具体请看程序中删除ivec容器中指定元素8的操作! 5.容器的赋值操作: 5.1 c1=c2; 删除容器c1内的所有元素,然后将c2的元素复制给c1,c1和c2的容器类型以及其元素类型必须相同! 5.2 c.assign(b,e); 重新设置c的元素:将迭代器b和e标记的范围内所有的元素复制到c中。b和e必须不是指向c中元素的迭代器! 5.3 c.assign(n,t); 将容器c重新设置为存储n个值为t的元素。vector容器中常用函数操作的代码实现:#include<iostream> #include<vector> using namespace std; int main(void) { //往vector容器中添加元素的操作 vector<int>::iterator iter; vector<int> ivec; for (int i = 6; i != 11; ++i) { ivec.push_back(i);//在ivec容器的尾部添加元素6至10 } cout << "使用push_back()在ivec容器的尾部添加元素6至10,输出结果为:" << endl; for (iter = ivec.begin(); iter != ivec.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; for (int i = 5; i != 0; i--)//在ivec容器的前端依次插入元素1至5 { iter = ivec.begin(); ivec.insert(iter, i); } cout << "使用insert(p,t)在ivec容器的前端依次插入元素1至5,输出结果为:" << endl; for (iter = ivec.begin(); iter != ivec.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; ivec.insert(iter = ivec.begin(), 5, 0);//在ivec容器的前端插入5个0 cout << "使用insert(p,n,t)在ivec容器的前端插入5个0,输出结果为:" << endl; for (iter = ivec.begin(); iter != ivec.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; int a[] = { -1, -2, -3, -4, -5 }; ivec.insert(iter = ivec.begin(), a, a + 5);//在ivec容器的前端插入一段元素 cout << "在ivec容器的前端插入-1至-5,输出结果为:" << endl; for (iter = ivec.begin(); iter != ivec.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; //vector容器大小的操作 if (!ivec.empty())//如果容器不为空 { cout << "ivec容器中元素的个数为:" << ivec.size() << endl; } cout << endl << endl; //访问容器中的元素的操作 cout << "ivec容器中的第一个元素是:" << ivec.front() << endl; cout << "ivec容器中的最后一个元素是:" << ivec.back() << endl; cout << "ivec容器中第三个元素是:" << ivec[2] << endl; cout << "容器ivec中的元素为(使用at(n)的方法遍历容器中的元素):" << endl; for (int i = 0; i != 20; ++i) { cout << ivec.at(i) << " "; } cout << endl << endl; //删除容器中的元素的操作 cout << "删除ivec容器中的第一个元素:" << endl; ivec.erase(iter = ivec.begin()); cout << "删除ivec容器中的最后一个元素:" << endl; ivec.pop_back(); cout << "容器ivec中的元素为:" << endl; for (iter = ivec.begin(); iter != ivec.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; cout << "删除ivec容器中的前五个元素:" << endl; ivec.erase(ivec.begin(), ivec.begin() + 5); cout << "容器ivec中的元素为:" << endl; for (iter = ivec.begin(); iter != ivec.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; cout << "删除ivec中为8的元素:" << endl; int searchValue(8); iter = find(ivec.begin(), ivec.end(), searchValue); if (iter != ivec.end()) { ivec.erase(iter); } cout << "容器ivec中的元素为:" << endl; for (iter = ivec.begin(); iter != ivec.end(); ++iter) { cout << *iter << " "; } cout << endl << endl; //容器的赋值操作 vector<int>ivec2; ivec2 = ivec;//将容器ivec中的元素复制给ivec2 cout << "将容器ivec中的元素复制给ivec2,容器ivec2中的元素为:" << endl; for (iter = ivec2.begin(); iter != ivec2.end(); ++iter) { cout << *iter << " "; } cout << endl; ivec2.assign(5, 0);//将ivec2重新设置为存有5个0的容器 cout << "将ivec2重新设置为存有5个0的容器,输出结果为:" << endl; for (iter = ivec2.begin(); iter != ivec2.end(); ++iter) { cout << *iter << " "; } cout << endl; int b[] = { 10, 11, 12, 13, 14, 15 }; ivec2.assign(b, b + 6);//将一对迭代器标记的范围内10到15的元素复制到容器ivec2中 cout << "重新设置容器,将一对迭代器标记的范围内10到15的元素复制到容器ivec2中,输出结果为:" ; for (iter = ivec2.begin(); iter != ivec2.end(); ++iter) { cout << *iter << " "; } cout << endl; cout << "删除ivec2容器中的所有元素:" << endl; ivec2.clear(); if (ivec2.empty()) cout << "ivec2容器为空!" << endl; cout << endl << endl; system("pause"); return 0; }
![]()