目录
0.提醒
1.介绍
2.构造
1.正常构造
2.默认值构造
3.调用默认构造函数构造
3.遍历
1.迭代器
2.范围for
3.下标访问
4.容量
1.capacity:返回当前容器的容量
2.reserve:如果传的k比当前容量大,则扩容到比k大或者等于k的数;如果传的k比当前容量小也不会缩容(这点区别string,string中是可能缩容的)
5.resize:改变有效数据个数(如果传的k比当前有效数据个数大,则会增加指定数据;如果传的k比当前有效数据个数小,则会删除末尾的数据)
1.删除数据
2.增加数据
1.按照默认值或者调用默认构造函数(增加自定义类型时)增加数据
2.按照指定数据增加数据
6.增删系列
1.insert:插入数据(只支持迭代器区间了)
2.erase:删除数据(只支持迭代器区间)
3.push_back:尾插一个数据
7.swap:交换对象中的成员变量
8.clear:清除数据
9.vector的输入输出
1.输入
2.输出
10.二维数组
0.提醒
STL比较详细的部分功能介绍(包括迭代器等等)放在我的STL专栏中的string部分进行详细地讲解了,如果是初次接触STL部分的兄弟,建议先把我的string中涉及STL基础的部分先看完再来看这一篇,感谢观看!!!
1.介绍
C++中的vector就是顺序表
2.构造
1.正常构造
//拿10个1构造顺序表
vector<int> v1(10, 1);//拿迭代器区间构造顺序表
vector<int> v2(v1.begin() + 1, v1.end() - 1);//拷贝构造
vector<int> v3(v2);
2.默认值构造
//按照5个默认值构造
vector<int> v1(5);
for (auto v : v1)cout << v << ' ';
结果:
3.调用默认构造函数构造
//构造了能存5个vector对象的顺序表,第二个参数没有填,
// 就是调用的默认构造,里面的5个顺序表都是空的
vector<vector<int>> vv(5);
3.遍历
1.迭代器
//迭代器
vector<int>::iterator it = v2.begin();
while (it != v2.end())
{cout << *it<<' ';it++;
}
2.范围for
//范围for
for (auto v : v2)cout << v << ' ';
3.下标访问
//下标访问
for (int i = 0;i < v2.size();i++)cout << v2[i] << ' ';
4.容量
1.capacity:返回当前容器的容量
cout<<v1.capacity();
2.reserve:如果传的k比当前容量大,则扩容到比k大或者等于k的数;如果传的k比当前容量小也不会缩容(这点区别string,string中是可能缩容的)
v1.reserve(100);
cout<<v1.capacity();
5.resize:改变有效数据个数(如果传的k比当前有效数据个数大,则会增加指定数据;如果传的k比当前有效数据个数小,则会删除末尾的数据)
1.删除数据
//拿10个1构造顺序表
vector<int> v1(10, 1);//删除后面的4个数据
v1.resize(6);//范围for
for (auto v : v1)cout << v << ' ';
结果:
2.增加数据
1.按照默认值或者调用默认构造函数(增加自定义类型时)增加数据
//拿10个1构造顺序表
vector<int> v1(10, 1);//增加5个默认值
v1.resize(15);//范围for
for (auto v : v1)cout << v << ' ';
结果:
2.按照指定数据增加数据
//拿10个1构造顺序表
vector<int> v1(10, 1);//增加5个2
v1.resize(15,2);//范围for
for (auto v : v1)cout << v << ' ';
结果:
6.增删系列
1.insert:插入数据(只支持迭代器区间了)
//拿10个1构造顺序表
vector<int> v1(10, 1);//在下标为4的位置插入2个3
v1.insert(v1.begin() + 4, 2, 3);//范围for
for (auto v : v1)cout << v << ' ';
结果:
2.erase:删除数据(只支持迭代器区间)
3.push_back:尾插一个数据
7.swap:交换对象中的成员变量
vector<int> v1(10, 1);
vector<int> v2(10, 2);
v1.swap(v2);//范围for
for (auto v : v1)cout << v << ' ';
结果:
8.clear:清除数据
vector<int> v1(10, 1);
v1.clear();//范围for
for (auto v : v1)cout << v << ' ';
结果:输出为空
9.vector的输入输出
由于vector没有重载流插入与流提取,所以我们采用别的输入输出方法。
1.输入
//先构造能存5个数据的顺序表,然后再遍历这个顺序表对每个空间进行输入
vector<int> v1(5, 5);
for (int i = 0;i < v1.size();i++)cin >> v1[i];
2.输出
//先构造能存5个数据的顺序表,然后再遍历这个顺序表对每个空间进行输入
vector<int> v1(5, 5);
for (int i = 0;i < v1.size();i++)cin >> v1[i];//范围for进行输出
for (auto v : v1)cout << v << ' ';
代码运行:
10.二维数组
vector<int> v1(6, 1);//这个顺序表里存的是5个vector对象,相当于5行6列的二维数组
vector<vector<int>> v2(5, v1);