一. 一维数组
1. 数组初始化
//第一种初始化,就单纯的建立一个可变数组array,因为还没有存放元素,未分配空间
vector<int> array;
//第二种初始化,是使用初始化列表来指定初始值以及元素个数
//以初始化列表中的値作为元素初始值,生成有6个数的初始vector数组
vector<int> array = {1,2,3,4,5,6};
vector<int> array{1,2,3,4,5,6};
//第三种初始化,使用初始元素个数以及指定元素值来生成初始vector数组
//生成一个具有numbers个元素的vector数组,且数组中所有元素初始化为value
vector<int> array(numbers, value);
vector<int> array(numbers);//此时,默认value为0
//第四种初始化,使用复制另一个数组的方式来初始化一个新数组,
//表示复制前n个元素
vector<int> newArray(array.begin(), array.begin() + n);//n = 3: newArray{1,2,3}
2. 数组的访问操作
// 第一种:通过下标访问,与普通数组一样
array[0]; // 1
array[1]; // 2
array[2]; // 3
array[3]; // 4
array[4]; // 5
array[5]; // 6
// 第二种:通过迭代器访问
vector<int>::iterator it; // 迭代器it的定义
it = array.begin();
// 使用auto定义迭代器it也可
auto it = array.begin();
for(int i = 0 ; i < 6 ; i ++) {
cout<<*(it + i)<<" ";
}
3. 数组的遍历操作(auto定义)
//C++11标准,auto关键字遍历
for(auto iter = array.begin(); iter != array.end(); iter ++){
cout << *iter <<" ";
}
// 也可以将下列中的auto换成定义的int型
for(auto iter : array)
{
cout<<iter<<" ";
}
4. 数组的其他操作
//添加元素
array.push_back(7);//将元素7加入数组末尾
//删除元素
// 1.删除数组末尾的元素
array.pop_back();
// 2.通过erase(iter),单个删除迭代器为iter处的元素
auto iter = array.begin();
array.erase(iter);//删除array[0]
// 3.通过erase(first,last),批量删除一个区间[first, last)内的所有元素
array.erase(array.begin() + 1, array.begin() + 3);//删除array[1],array[2]
//插入元素
// insert(iter, x)用来向vector的任意迭代器iter处插入一个元素x
auto iter = array.begin() + 1;
array.insert(iter, 9);//将元素9插入array[1]的位置
//清空所有元素
array.clear();
//获取数组长度
array.size();
//判空
array.empty();
二. 二维数组
1. 数组初始化
(1)定义的同时初始化元素值
vector<int> cov(3);//定义3个值为0的数组,具体参见上述一维数组的初始化
int row = 3;
vector<vector<int>> arr(row, cov);//row为行数,cov为列数上的数组,初始化成一个3*3的0元素矩阵
//或者换成另一种写法
int row = 3;
vector<vector<int>> vec(row, vector<int> (col,1));//col代表元素个数,也就是列数,1为元素默认值,若只有col,则默认值为0
(2)先通过resize函数初始化容器大小,然后赋值
函数原型:
void resize (size_type n);
void resize (size_type n, const value_type& val);
第一个参数是将容器的元素变成n个,第二个参数是将这n个元素变成val(没有就是默认值)
注意:resize不适用于array
如果当前大小大于所要求的大小,容器后部的元素会被删除;如果当前大小小于新大小,会将新元素添加到容器后部。
vector<vector<int>> arr;
int row = 3;
int col = 3;
arr.resize(row);//定义行数大小
for(int i = 0; i < arr.size(); i++) {
arr[i].resize(col);//定义每一列的大小
}
for(int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
arr[i][j] = 1;
}
}
// 或者另一种写法
vector<vector<int>> arr;
int row = 3;
int col = 3;
arr.resize(row, vector<int>(cov, 1));
for(int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
arr[i][j] = 1;
}
}
2. 数组的遍历操作
(1)迭代器遍历
for(auto iter = arr.begin(); iter != arr.end(); iter++)
{
auto vec_tmp = *iter;
for(auto it = vec_tmp.begin(); it != vec_tmp.end(); it++)
cout << *it << " ";
cout << endl;
}
(2)下标遍历
for (i = 0; i < arr.size(); i++)
{
for(j = 0; j < arr[0].size(); j++)
cout << arr[i][j] << " ";
cout << endl;
}
3. 数组的其他操作
// 添加元素
arr[i].push_back(1);
// 如下类似