目录
#个人初学笔记,无举例,如有疏漏或错误,欢迎指出#
一、声明与初始化
1.头文件
#include<vector>
2.声明
std::vector<Type> nameVector;
3.初始化
- resize()函数
//int类型举例
//std::vector<int> nameVector;
//对于int,分配n个0
nameVector.resize(n);
//对于int,分配n个m
nameVector.resize(n,m);
- 声明初始化
//int类型举例
//数组初始化
std::vector<int> nameVector = {1, 2, 3};
//类似resize()
std::vector<int> nameVector(n);
std::vector<int> nameVector(n, m);
//vector初始化, 复制
//设存在vector容器vector2
std::vector<int> nameVector(vector2);
std::vector<int> nameVector = vector2;
//指针初始化
//通常是截取数组的一部分
std::vector<int> nameVector(*ptr1, *ptr2);
//如std::vector<int> nameVector(vector2.begin() + 1, vector2.end() - 1);
- 二维数组
//声明(行数为m)
std::vector<std::Vector<Type>> nameVector(m);
//初始化(列数为n)
for(int i = 0; i < nameVector.size(); i++){
nameVector[i].resize(n);
}
二、常用方法
1.元素访问
- 下标访问
//访问下标为n的元素
nameVector[n]
- 函数访问
//at函数访问n位置的元素
nameVector.at(n);
2.大小与容量
//访问vector大小(有多少元素)
vector.size();
//访问vector容量(能有多少元素)
vector.capacity();
//大小重分配为n
vector.resize(n);
//变小=>抛弃末尾;变大=>填充默认值(通常为0)
3.判断为空
//判断容器是否为空
nameVector.empty();
4.元素添加
- 末尾插入
//末尾添加元素x
nameVector.push_back(x);
- 定位插入
//使用迭代器指定位置
std::vector<Type> iterator it;
//向迭代器位置插入元素x
nameVector.insert(it, x);
5.元素删除
- 末尾删除
//删除最后一个元素
nameVector.pop_back();
- 定位删除
//删除迭代器位置的元素
nameVector.erase(it);
//函数返回删除元素后一个元素的迭代器
- 定值删除
//删除值为x的元素
//需要algorithm库
remove(nameVetor.begin(), nameVector.end(), x);
//函数返回删除元素的后一个元素的迭代器
//然而,该函数不会改变size和capacity
//因此通常与erase()函数配合使用
nameVector.erase(remove(nameVetor.begin(), nameVector.end(), x), nameVector.end());
- 清空容器
//清空容器,但容量(capacity)不变
nameVector.clear();
6.元素修改
//修改下标为i的元素的值为x
nameVector[i] = x;
7.元素查找
//查找指定值为x的元素
//需要两个迭代器指定范围
nameVector.find(it1, it2, x);
//函数返回第一个该元素的迭代器,找不到则返回end(),即末尾迭代器
8.容器遍历
- 下标遍历
for(std::vector<Type>::iterator it = nameVector.begin(); it != nameVector.end(); it++){
//...访问元素(nameVector[it]或*it)...
}
- 元素遍历
//拷贝,x可修改,但不影响原数据
for(auto x: nameVector){
//...访问元素(x)...
}
//引用,x可修改,同步修改原数据
for(auto &x: nameVector){
//...
}
//只读,x不可修改
for(const auto &x: nameVector){
//...
}