1
| template <class T, class Alloc = allocator<T>> class vector;
|
vector的引入
vector 是表示大小可以更改的数组(任意类型)的序列容器。
vector 在使用前需要导入 #include <vector>
头文件,并且需要进行 using 声明 using std::vector
,才能直接使用 vector 。
说明 vector 保存何种对象的类型,通过将类型放在类模板后面的 <>
中来指定。
vector<T> v1;
: 保存类型为 T 对象,默认构造函数 v1 为空。vector<T> v2(v1)
: v2 是 v1 的一个副本。vector<T> v3(n, i)
: v3 包含 n 个值为 i 的元素。vector<T> v4(n)
: v4 包含 10 个 T 类型,但没有指定初始值。
vector的属性
顺序
序列容器中的元素按严格的线性顺序排列,各个元素按其在此序列中的位置进行访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream> #include <vector>
int main() { std::vector<int> myVector;
myVector.push_back(10); myVector.push_back(20); myVector.push_back(30);
for (int i = 0; i < myVector.size(); i++) { std::cout << myVector[i] << " "; }
return 0; }
|
执行结果:
动态数组
允许直接访问序列中的任何元素,甚至通过指针算术,并在序列末尾提供相对快速的元素添加/删除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include <iostream> #include <vector>
int main() { std::vector<int> myVector;
myVector.push_back(10); myVector.push_back(20); myVector.push_back(30);
int element = myVector[1];
myVector.pop_back();
myVector.push_back(40);
for (std::vector<int>::iterator it = myVector.begin(); it != myVector.end(); ++it) { std::cout << *it << " "; }
return 0; }
|
执行结果:
感知分配
容器使用分配器对象来动态处理其存储需求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include <iostream> #include <vector> #include <memory>
template <class T> struct MyAllocator : std::allocator<T> { };
int main() { std::vector<int, MyAllocator<int>> myVector;
myVector.push_back(10); myVector.push_back(20); myVector.push_back(30);
return 0; }
|
成员类型
成员函数
构造函数
析构函数
运算符(=)
迭代器
begin
begin() - 将迭代器返回到开头(公共成员函数)。
返回指向 vector 中第一个元素的迭代器,如果容器为空,则返回的迭代器值不应被取消引用。
指向序列容器开头的迭代器。
如果向量对象是 const 限定的,则该函数返回 const_iterator
。否则,它返回一个 iterator
。
成员类型 iterator 和 const_iterator 是随机访问迭代器类型(分别指向元素和 const 元素)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include <iostream> #include <vector>
int main () { std::vector<int> myvector; for (int i=1; i<=5; i++) myvector.push_back(i);
std::cout << "myvector contains:"; for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it) std::cout << ' ' << *it; std::cout << '\n';
return 0; }
|
执行结果:
1
| myvector contains: 1 2 3 4 5
|
end
end()
容量
非成员函数重载
模板专业化