1、vector的动态增长
当添加元素时,如果vector空间大小不足,则会以原大小的两倍另外配置一块较大的新空间,然后将原空间内容拷贝过来,在新空间的内容末尾添加元素,并释放原空间。vector的空间动态增加大小,并不是在原空间之后的相邻地址增加新空间,因为vector的空间是线性连续分配的,不能保证原空间之后有可供配置的空间。因此,对vector的任何操作,一旦引起空间的重新配置,指向原vector的所有迭代器就会失效。
vector的size(),capacity(),reserve(),resize()函数:
vector对象的内存布局如下图所示:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> a;
cout << "a.size(): " << a.size() << " a.capacity(): " << a.capacity() << endl;
for (int i = 0; i < 10; i++)
{
a.push_back(i);
cout << "a.size(): " << a.size() << " a.capacity(): " << a.capacity() << endl;
}
cout << endl;
vector<int> b;
b.reserve(10);
for (int i = 0; i < 10; i++)
{
b.push_back(i);
cout << "b.size(): " << b.size() << " b.capacity(): " << b.capacity() << endl;
}
b.push_back(11);
cout << "b.size(): " << b.size() << " b.capacity(): " << b.capacity() << endl;
cout << endl;
b.reserve(15);
cout << "after b.reserve(15):" << endl;
cout << "b.size(): " << b.size() << " b.capacity(): " << b.capacity() << endl;
b.resize(5);
cout << "after b.resize(5):" << endl;
cout << "b.size(): " << b.size() << " b.capacity(): " << b.capacity() << endl;
return 0;
}
输出:
a.size(): 0 a.capacity(): 0 a.size(): 1 a.capacity(): 1 a.size(): 2 a.capacity(): 2 a.size(): 3 a.capacity(): 4 a.size(): 4 a.capacity(): 4 a.size(): 5 a.capacity(): 8 a.size(): 6 a.capacity(): 8 a.size(): 7 a.capacity(): 8 a.size(): 8 a.capacity(): 8 a.size(): 9 a.capacity(): 16 a.size(): 10 a.capacity(): 16 b.size(): 1 b.capacity(): 10 b.size(): 2 b.capacity(): 10 b.size(): 3 b.capacity(): 10 b.size(): 4 b.capacity(): 10 b.size(): 5 b.capacity(): 10 b.size(): 6 b.capacity(): 10 b.size(): 7 b.capacity(): 10 b.size(): 8 b.capacity(): 10 b.size(): 9 b.capacity(): 10 b.size(): 10 b.capacity(): 10 b.size(): 11 b.capacity(): 20 after b.reserve(15): b.size(): 11 b.capacity(): 20 after b.resize(5): b.size(): 5 b.capacity(): 20
2、vector的用法
(1)头文件
#include<vector>
(2)声明以及初始化
vector<int> vec; //声明一个int型向量
vector<int> vec(5); //声明一个初始大小为5的int向量
vector<int> vec(10, 1); //声明一个初始大小为10且值都是1的向量
vector<int> vec(tmp); //声明并用tmp向量初始化vec向量
vector<int> tmp(vec.begin(), vec.begin() + 3); //用向量vec的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};
vector<int> vec(arr, arr + 5); //将arr数组的元素用于初始化vec向量
//说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
//这个主要是为了和vec.end()指针统一。
vector<int> vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
(3)基本操作
1??容量
2??修改
3??迭代器
4??元素的访问
5??算法
遍历
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); it++)
cout << *it << endl;
//或者
for (size_t i = 0; i < vec.size(); i++) {
cout << vec.at(i) << endl;
}
【校招面试 之 C/C++】第20题 C++ STL(二)之Vector
原文:https://www.cnblogs.com/xuelisheng/p/9347544.html