【C++】vector
文章目录
- 一、介绍
- 1、初始化
- 2、遍历
- (1)for循环,下标访问
- (2)迭代器
- (3)范围for
- 3、reserve接口
- 4、resize接口
- 5、插入
- 二、存放及使用
- 1、可存放基本数据类型
- 2、string类型
- 3、vector<>类型
- 例题:杨辉三角
- 三、谢谢观看!
一、介绍
vector可以理解为是一个顺序表
1、初始化
//初始化
void test1()
{vector<int> v1;vector<int> v2(10, 1); //顺序表中元素为int类型,初始化为10个1vector<int> v3(v2.begin(), v2.end());//int类型,用v2的迭代器来初始化v3
}
v2、v3初始化细节:
2、遍历
三种方法:
(1)for循环,下标访问
void test2()
{vector<int> v1(10, 1);//1、for循环,通过下标访问for (int i = 0; i < v1.size(); i++){cout << v1[i] << " ";}cout << endl;
}
(2)迭代器
void test2()
{vector<int> v1(10, 1);//2、迭代器vector<int>::iterator it = v1.begin(); //声明一个迭代器it初始化为指向v1的第一个元素while (it != v1.end()){cout << *it << " ";it++;}cout << endl;
}
(3)范围for
void test2()
{vector<int> v1(10, 1);//3、范围forfor (auto e : v1){cout << e << " ";}cout << endl;
}
遍历结果:
3、reserve接口
扩空间,最少扩到n个元素空间。
4、resize接口
调整容器大小,使其能够容纳n个元素
5、插入
1、尾插push_back
2、头插insert
//插入
void test5()
{vector<int> v(10, 1);cout << "size: " << v.size() << " ";cout << "capacity: " << v.capacity() << endl;v.push_back(4); //尾插元素4v.insert(v.begin(), 6); //头插6v.insert(v.begin() + 3, 6); //第四个位置插入6cout << "size: " << v.size() << " ";cout << "capacity: " << v.capacity() << endl;for (auto e : v){cout << e << " ";}cout << endl;
}
二、存放及使用
1、可存放基本数据类型
2、string类型
//存放string类型
vector<string> v1;
v1.push_back("aaabbb");
v1.push_back("cccddd");
for (const auto& e : v1)
{cout << e << endl;
}
3、vector<>类型
vector<vector< int >> :相当于二维数组
vector的成员组成:
画图分析:
//存放vector
//vector<vector<int>> vv; //相当于二维数组
//10*5的二维数组,10行5列
vector<int> v(5, 1);
vector<vector<int>> vv(10, v);
//访问
cout << vv[4][3] << endl;
访问时通过下标访问,实际上是两重operator[ ]
vv[4][3] 等价于 v.operator[](4).operator[](3)
- 遍历
//遍历
for (int i = 0; i < vv.size(); i++) //vv.size() 行数
{for (int j = 0; j < vv[i].size(); j++)cout << vv[i][j];cout << endl;
}
使用vector构建数组比单纯的构建二维数组更加方便,可以动态开辟空间更加便捷。
例题:杨辉三角
注:该题需要开辟动态数组,二维数组的第一行有1个元素,第二行有2个元素,……第n行有n个元素
class Solution {
public:vector<vector<int>> generate(int numRows) {vector<vector<int>> vv(numRows); //为容器vv开numRows行for(int i=0;i<numRows;i++){vv[i].resize(i+1,1); //每行开辟i+1个空间并初始化为1}//赋值for(int i=2;i<vv.size();i++){for(int j=1;j<vv[i].size()-1;j++){vv[i][j]=vv[i-1][j]+vv[i-1][j-1];}}return vv;}
};