力扣C++刷题技巧 容器


前言

本文主要是以个人平时使用的角度来总结这些容器好用的方法


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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值