vector概述
容器是一些特定类型对象的集合,vector是一种顺序容器,它提供了控制元素存储和访问顺序的能力,这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。
vector类型 - 可变大小数组。支持快速随机访问。在尾部之外的位置插入和删除元素可能很慢。
Vector定义和初始化
定义:
//Vector<type_name>name
//type_name:vector所存数据的类型,eg:int float,也可以是复合型
//name:vetcor这个数组的名字
//eg:
class MyClass{
private:
int t;
public:
MyClass():t(0){};
int getT() { return t; };
};
vector<int>arr;
vector<MyClass>arr1;
初始化:
第一种:直接拷贝
直接拷贝有两种:1、直接拷贝整个容器;2、拷贝由迭代器指定的元素范围(迭代器后面再写)。
直接拷贝另一个容器要求两个容器的类型和元素类型必须匹配,不过第二种拷贝方式容器类型可以不同。
vector<int>arr;
list<int>arr1 = { 0,1,2,3 };
vector<MyClass>arr1;
for (auto i = 0; i < 10; i++)
arr.push_back(i);
//第一种
vector<int>arr2 = arr; // right
vector<int>arr3 = arr1;//wrong,容器类型不匹配
//第二种
vector<int>arr4(arr.begin(), arr.end());//right
vector<int>arr5(arr1.begin(), arr1.end());//right
第二种:列表初始化
在C11标准中,可以对Vector进行列表初始化。
vector<int>arr6{0,1,2};//初始化了一个大小为3,值分别为0,1,2的vector
第三种: 与vector大小相关的构造函数
vector提供了一个构造函数,它接受一个容器大小和元素初始值(可选)。
vector<int>arr7(10,-1);//初始化10个int,每一个大小都是-1.
vector<int>arr8(10);//初始化10个int,每一个大小都是默认值0
赋值
赋值主要有以下几种:1、直接拷贝另一个vector;2、替换为右边元素的拷贝;3、使用assign(a,b),拷贝另一个容器[a, b)中的元素
arr1 = arr;//size大小和value大小与arr相同
arr1 = { 1, 2, 3 };//size = 3,values分别为1,2,3
arr1.assign(arr.begin(), arr.end());//size大小和value大小与arr相同
基本操作函数
这些操作主要包含了vector的增删改查.
增:
主要是两个函数:push_back 和 insert
arr.push_back(i);//push_back在vector末尾添加一个元素i
arr1.insert(arr.begin()+i, i)//在arr的第i个位置插入元素i,
删:
主要是两个函数:pop_back和earse
if(!arr.empty())arr.pop_back();//不用参数,在不为空的情况下删除vector最后一个值,
arr.earse(arr.begin() + 1);//删除第一个元素
arr.earse(arr.begin()+1, arr.begin()+3);//删除第一个和第二个元素
改 和 查:
改比较简单,直接用赋值符号就行了
arr[i] = 1;//把1赋值给第i个值
//如果知道下标就直接访问,不然只能一个一个的找
return arr[i];//直接访问
for (auto i = 0; i < arr.size(); i++)
if(arr[i] == target)
return arr[i];
其他操作
arr.size();//返回容器大小
arr.empty();//bool类型,检查容器是否为空。
参考书籍:C++Primer第五版