vector()是一种具有连续结构的序列式容器,它没有自定义的查找函数,使用std::find查找元素时间复杂度为O(n)。它依赖于start、finish、end_of_storage三根指针来控制整个容器,它们分别表示vector的起始位置、有效部分的终点位置和实际的终点位置,因此vector容器本身的大小是12 byte。
在本文中,我将多次使用size()和capacity()这两个vector的成员函数,前者表示有效部分的大小,后者表示实际部分的大小,关于二者的差异稍后解释。
1.如何创建一个vector对象?(1)创建一个int类型的空vector
//创建一个int类型的空vector vectorvec1; cout << "size=" << vec1.size() << endl; cout << "capacity=" << vec1.capacity() << endl;
输出:
size=0
capacity=0
需要注意空vector不可通过下标调用法来访问,也就是说下述做法会报错:
cin >> vec1[0];
(2)创建的同时指定个数
//创建的同时指定个数 vectorvec2(5); cout << "size=" << vec2.size() << endl; cout << "capacity=" << vec2.capacity() << endl; for (int i = 0; i < vec2.size(); ++i) cout << vec2[i] << ' '; cout << endl;
输出:
size=5
capacity=5
0 0 0 0 0
指定个数的做法将默认初值为0,如果希望指定其他初值,可以这样做:
vectorvec2_1(5, 1); for (int i = 0; i < vec2_1.size(); ++i) cout << vec2_1[i] << ' '; cout << endl;
输出:
1 1 1 1 1
(3)创建的同时指定初值和个数
//创建的同时指定初值及个数 vectorvec3{ 1,2,3,4,5 }; cout << "size=" << vec3.size() << endl; cout << "capacity=" << vec3.capacity() << endl; for (int i = 0; i < vec3.size(); ++i) cout << vec3[i] << ' '; cout << endl;
输出:
size=5
capacity=5
1 2 3 4 5
(4)通过其他相同类型的容器或数组来创建
//通过其他相同类型的容器来创建 vectorvec4(vec3); cout << "size=" << vec4.size() << endl; cout << "capacity=" << vec4.capacity() << endl; for (int i = 0; i < vec4.size(); ++i) cout << vec4[i] << ' '; cout << endl;
输出:
size=5
capacity=5
1 2 3 4 5
这种方式将复制vec3中的全部内容,也可以通过迭代器来指定复制的范围:
vectorvec4_1(vec3.begin(), vec3.begin() + 3); cout << "size=" << vec4_1.size() << endl; cout << "capacity=" << vec4_1.capacity() << endl; for (int i = 0; i < vec4_1.size(); ++i) cout << vec4_1[i] << ' '; cout << endl;
输出:
size=3
capacity=3
1 2 3
(1)使用push_back()和pop_back()
//通过push_back和pop_back来插入和删除元素 vec1.push_back(1); cout << "size=" << vec1.size() << endl; cout << "capacity=" << vec1.capacity() << endl; for (int i = 0; i < vec1.size(); ++i) cout << vec1[i] << ' '; cout << endl; vec1.push_back(2); cout << "size=" << vec1.size() << endl; cout << "capacity=" << vec1.capacity() << endl; for (int i = 0; i < vec1.size(); ++i) cout << vec1[i] << ' '; cout << endl; vec1.pop_back(); cout << "size=" << vec1.size() << endl; cout << "capacity=" << vec1.capacity() << endl; for (int i = 0; i < vec1.size(); ++i) cout << vec1[i] << ' '; cout << endl;
输出:
size=2
capacity=2
1 2
size=1
capacity=2
1
这两个函数分别是往vector的末尾插入或删除一个元素。
(2)使用emplace_back()
//使用emplace_back插入元素 vec1.emplace_back(3); cout << "size=" << vec1.size() << endl; cout << "capacity=" << vec1.capacity() << endl; for (int i = 0; i < vec1.size(); ++i) cout << vec1[i] << ' '; cout << endl;
输出结果:
size=2
capacity=2
1 3



