前言
本文主要是以个人平时使用的角度来总结这些容器好用的方法
vector
经常使用的就是size、clear、pop_back、push_back、front、back
特定场景下比较有用的方法:
//用指定数量和值替换数组中的内容
assign(size_type count, const T& value);
vec.assign(3, 10); // 将数组中的内容替换为三个元素 10
// 使用 assign 替换数组中的内容
assign(InputIterator first, InputIterator last);
std::vector<int> vec2 = {6, 7, 8, 9};
vec1.assign(vec2.begin(), vec2.end()); // 用 vec2 中的元素替换 vec1 中的内容
注意一下clear的用法:用于移除容器中的所有元素,将容器的大小重置为0。但是,这个操作不会改变容器的容量,即分配给vector的内存空间保持不变,只是其中存储的元素被销毁,
string
- 字符转换操作:
调用函数可以用toupper和tolower
或者+32由小写变成大写,-32由大写变成小写
- 从一个长的字符串中以空格为单位取单词
//iss类似于一个字符串缓冲区,允许对他像操作输入流一样使用
istringstream iss(str);
while(iss>>s){
//`iss >> s` 这一行代码正在执行的操作是从 `istringstream` 对象 `iss` 中读取字符串直到遇到下一个空白字符
//s就是按顺序取出来的单词
}
- 获取字符串的子串
//pos表示起始位置,第二个参数表示要截取的长度,不填默认就是截取从pos开始往后的所有字符
string substr(size_t pos = 0, size_t len = npos)
unordered_map
unordere_map的效率要更好,另外两个具体情况具体分析
1.遍历的方法:
unordered_map<int,int> mp;
for(auto it=mp.begin();it!=mp.end;it++){
it->first;
it->second;
}
基于范围的遍历:
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl; }
2.常用方法:
insert:插入键值对
std::unordered_map<Key, T> myMap;
myMap.insert(std::make_pair(key, value));
emplace:在 C++11 及更高版本中,emplace
函数用于在不创建临时对象的情况下插入元素。
myMap.emplace(key, value);
find:用于查找指定键的元素,返回指向该元素的迭代器。如果未找到,则返回 end()
。
auto it = myMap.find(key);
if (it != myMap.end()) { // 元素找到 }
operator[]: 用于通过键访问元素。如果键不存在,将会插入一个新的键值对。
auto value = myMap[key];
其余的一些函数:empty,clear,size
unordered_set
unordered_set效率更好
1.遍历方式:
std::unordered_set<int> mySet = {1, 2, 3, 4, 5};
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout << *it << " ";
}
基于范围的循环:
for (const auto& element : mySet) {
std::cout << element << " ";
}
2.常用方法
插入元素:insert,emplace(不需要创建临时对象)
删除指定元素:erase();参数为想删除的数
find:查找指定元素,返回指向该元素的迭代器。如果未找到,则返回 end()
。
auto it = mySet.find(2);
if (it != mySet.end()) { // 元素找到 }
count:返回指定元素在集合中出现的次数,因为集合中元素唯一,所以返回值只能是 0 或 1。
if (mySet.count(3) > 0) { // 元素存在 }
3.set和multiset如何确保元素是按从小到大进行排序的
用greater实现,否则默认是用less的比较顺序
std::multiset<int, std::greater<int>> myMultiset