关于初学C++容器的的一些方法的简单记录
容器的初始化与索引数据类型:
vector初始化
1 | vector<int> my_vec{1,2,3}; |
map初始化
1 | map<string, int> my_map{{ , } , { , }}; //map 存储pair 类型作为元素 |
数据类型
对于容器的索引,例如vec[index]. index 是unsign类型,类型名字是size_t,当与int类型进行比较,以及运算是容易出错。
1
2
3
4
5 vector<int> ans(10,5);
vector<int> my_v{ans.begin()+2,ans.end()-5};
//会报错no matching function for call to 'min' auto anss = min(5,ans.size()); ans.size()不是int类型 转化为int 才能比较。
auto anss = min(5,ans.size());
容器的增删改查加排序
添加元素
添加数据可以通过容器自带的类似于push_back(), insert()方法;或者inserter() 这样的泛型函数;
1
2
3
4vector<int> vec{1,2,3,4};
auto it = vec.insert(vec.begin()+1, 10); // 返回的it 是插入位置(10 所在的位置)的迭代器, 在第一个参数(迭代器)前面插入后面参数的内容
it = vec.insert(vec.end(), 3, 4); //插入通过构造函数调用后两个参数的返回值(3个4)插入到vec 末尾
it = vec.insert(vec.end(),vec2.begin(), vec2.end()); // 将vec2插入到vec1里, 类似python 里面的extend
删除元素
1 |
|
修改
可以通过迭代器的解引用*it 进行索引和修改 也可以是下标索引,map索引的时候可能会添加心的pair
查找
1 | // 对于string vec 调用自己的find 方法 |
容器最大值最小值的索引
通过返回最大或者最小值的迭代器,然后与begin()迭代器做差得到1
2
3vector<int> v(10);
auto it = max_element(v.begin(),v.end());
int index = it-v.begin();
排序
泛型函数sort(it.begin(), it.end(),my_sort);1
2
3
4
5
6sort(numbers.begin(),numbers.end(),my_sort);
static bool my_sort(int A, intB){
return A<B;//A靠前
}
my_sort函数为成员函数时(成员函数默认第一个参数是*this) 需要加static 作为一般函数(没有this参数)是不需要
容器的泛型函数
反转
1 | vector<int> arrayRever{1,2,3,4}; |