vector 的使用
向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
#include < vector>
using namespace std;
int main(){
vector<uint8_t> vector_tem;
// push_back 向量尾部增加一个元素X
vector_tem.push_back(10);
vector_tem.push_back(1);
vector_tem.push_back(3);
// 迭代输出
printf("vector_tem size : %lu ",vector_tem.size());
for(uint8_t i = 0; i<vector_tem.size();i++){
// 注意点
// 因为vector的size方法返回的是size_type 的无符号类型 所以用
// 无符号的uint8_t 传递
printf(" value: %d \n",vector_tem[i]);
}
// 元素的删除
if(vector_tem.size() > 0){
// 获取首元素的引用 front
if(vector_tem.front() == 10){
// 删除指定的元素 begin是获取首元素的指针地址
vector_tem.erase(vector_tem.begin());
}
}
}
其他常用方法
增加函数
iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一个元素x
删除函数
iterator erase(iterator first,iterator last):删除向量中[first,last)中元素
void pop_back():删除向量中最后一个元素
void clear():清空向量中所有元素
遍历函数
reference at(int pos):返回pos位置元素的引用
reference front():返回首元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回向量尾指针,指向向量最后一个元素的下一个位置
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素之前的位置
引用 https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html
map 的使用
map 是 STL 的一个关联容器,它提供一对一的hash
第一个称为关键字(key),每个关键字只能在map中出现一次;
第二个称为该关键字的值(value);
pair类型
在介绍关联容器操作之前,先了解一下 pair 的标准库类型。pair类型是在有文件 utility 中定义的,pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如STL中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first ,second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
make_pair(v1, v2) : 以v1和v2值创建的一个新的pair对象
除此之外,pair对象还有一些方法,如取出pair对象中的每一个成员的值:
p.first 返回p的名为 first 的(公有)数据成员
p.second 返回p的名为second的(公有)数据成员
#include <stdio.h>
#include <string.h>
#include <string>
#include <utility>
using namespace std;
int main(){
pair<int, string> p1(0, "Hello");
printf("%d, %s\n", p1.first, p1.second.c_str());
pair<int, string> p2 = make_pair(1, "World");
printf("%d, %s\n", p2.first, p2.second.c_str());
return 0;
}
map 基本操作
map是键-值对的组合,即map的元素是pair,其有以下的一些定义的方法:
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<char, std::string> mymap;
// 使用下标 [ ] 访问
mymap['a'] = "an element";
mymap['b'] = "another element";
mymap['c'] = mymap['b'];
std::cout << "mymap['a'] is " << mymap['a'] << '\n';
std::cout << "mymap['b'] is " << mymap['b'] << '\n';
std::cout << "mymap['c'] is " << mymap['c'] << '\n';
std::cout << "mymap['d'] is " << mymap['d'] << '\n';
std::cout << "mymap now contains " << mymap.size() << " elements.\n";
// 使用 at() 方法访问
std::map<std::string, int> mymap1 = {
{"alpha", 0}, {"beta", 0}, {"gamma", 0}};
mymap1 .at("alpha") = 10;
mymap1 .at("beta") = 20;
mymap1 .at("gamma") = 30;
for (auto& x : mymap1 ) {
std::cout << x.first << ": " << x.second << '\n';
}
// 使用insert()插入元素
std::map<char, int> mymap2;
// 插入单个值
mymap2.insert(std::pair<char, int>('a', 100));
mymap2.insert(std::pair<char, int>('z', 200));
mymap2.insert(std::make_pair('f', 300)); // pair方式和make_pair功能是一样的
// erase() 删除元素
map<int, int> mymap;
for (int i = 0; i < 20; i++) {
mymap.insert(make_pair(i, i));
}
mymap.erase(0); // (1)删除key为0的元素
mymap.erase(mymap.begin()); // (2)删除迭代器指向的位置元素
map<int, int>::iterator it;
for (it = mymap.begin(); it != mymap.end(); it++) {
cout << it->first << "==>" << it->second << endl;
}
return 0;
}
其他函数
count(k) 查找关键字k出现的次数
find(k) 查找元素
if (mp.count(0)) {
cout << "yes!" << endl;
} else {
cout << "no!" << endl;
}
map<int, int>::iterator it_find;
it_find = mp.find(0);
if (it_find != mp.end()) {
it_find->second = 20;
} else {
cout << "no!" << endl;
}
empty() 容器是否为空
clear() 清空容器
size() 容器的大小
begin() 返回指向map头部的迭代器
end() 返回指向map末尾的迭代器
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
网友评论