目录
vector 并不支持流插入与流提取,但是可以自己设计,更加灵活方便
链接
cplusplus.com/reference/vector/vector/https://cplusplus.com/reference/vector/vector/
1. vector的定义
(constructor)构造函数声明 | 接口说明 |
vector() | 无参构造 |
vector(size_type n, const value_type& val = value_type()) | 构造并初始化n个val |
vector (const vector& x); | 拷贝构造 |
vector (InputIterator first, InputIterator last); | 使用迭代器进行初始化构 造 |
2. vector的构造
//模版类只能显式实例化
vector<int> v1;
vector<int> v2(10, 1);
//迭代器初始化
vector<int> v3(v2.begin(), v2.end());
vector<int> v4(++v2.begin(), --v2.end());
3. vector 的遍历
void test_vector1()
{
vector<int> v1;
vector<int> v2(10, 1);
vector<int> v3(++v2.begin(), --v2.end());
//下标遍历
for (size_t i = 0; i < v3.size(); i++)
{
cout << v3[i] << " ";
}
cout << endl;
//迭代器遍历
vector<int>::iterator it = v3.begin();
while (it != v3.end())
{
cout << *it << " ";
++it;
}
cout << endl;
// 范围 for 遍历
for (auto e : v3)
{
cout << e << " ";
}
cout << endl;
}
4. vector 的扩容机制
void TestVectorExpend()
{
size_t sz;
vector<int> v;
sz = v.capacity();
cout << "capacity changed :" << sz << "\n";
cout << "make a grow" << endl;
for (size_t i = 0; i < 100; i++)
{
v.push_back(i);
if (sz != v.capacity())
{
sz = v.capacity();
cout << "capacity changed :" << sz << "\n";
}
}
}
5. vector 的空间接口
size | 获取数据个数 |
capacity | 获取容量大小 |
empty | 判断是否为空 |
resize | 改变vector的size |
reserve | 改变vector的capacity |
5.1 resize 接口
vector<int> v(10, 1);
cout << v.size() << endl;
cout << v.capacity() << endl;
//小于size
v.resize(5, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;
//大于size
v.resize(15, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;
void test_vector3()
{
//10个整形数据1
vector<int> v(10, 1);
//申请20空间
v.reserve(20);
cout << v.size() << endl;
cout << v.capacity() << endl;
//10个整形数据1,补上5个整形数据2
v.resize(15, 2);
cout << v.size() << endl;
cout << v.capacity() << endl;
//10个整形数据1,5个整形数据2,补上10个整形数据3
v.resize(25, 3);
cout << v.size() << endl;
cout << v.capacity() << endl;
//只保留5个数据
v.resize(5);
cout << v.size() << endl;
cout << v.capacity() << endl;
}
通常 vector 支持迭代器插入
5.2 push_back
//尾插
vector<int> v(10, 1);
v.push_back(10);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
5.3 insert
//头插
vector<int> v(10, 1);
v.insert(v.begin(), 1);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
//第一个数+3之后在第三个位置进行插入
v.insert(v.begin() + 3, 1);
for (auto e : v)
{
cout << e << " ";
}
5.4 erase
//头删
vector<int> v(10, 1);
v.erase(v.begin());
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
//第一个数+3之后删除第三个位置的数据
v.erase(v.begin() + 3);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
5.5 流插入与流提取
vector<int> v(10);
for (size_t i = 0; i < v.size(); i++)
{
cin >> v[i];
}
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
6. vector 的不同类型元素
//二维数组
//5个元素的一维数组
vector<int> v(5, 1);
//开辟一个10行5列的二维数组
vector<vector<int>> vv(10, v);
vv[2][1]=1;
//这两段代码的意思是相同的
//vv.operator[](2)operator[](1)=2;
遍历
//二维数组
//5个元素的一维数组
vector<int> v(5, 1);
//开辟一个10行5列的二维数组
vector<vector<int>> vv(10, v);
//使用下标遍历二维数组
for (int i = 0; i < vv.size(); i++)
{
for (int j = 0; j < v.size(); j++)
{
cout << vv[i][j] << " ";
}
cout << endl;
}
感谢观看~