文章目錄
- 集合
- 優先隊列
- 雙端隊列
- 排序時自定義比較函數
- 最大數值
- 字符串
- 追加:
- 刪除:
- 子串:
- 元組
- vector
- 查找
- 創建和初始化賦值:
- 字典map
- 引入頭文件
- 定義和初始化
- 插入元素
- 訪問元素
- 更新元素
- 刪除元素
- 檢查元素存在
- 遍歷元素
- int和string轉換
集合
無重復字符的最長子串
unordered_set<char> occ;
occ.erase(s[i - 1]);
occ.insert(s[rk + 1]);
occ.count(s[rk + 1]);
優先隊列
滑動窗口最大值
priority_queue<pair<int, int>> Q;
Q.push({nums[i + k - 1], i + k - 1});
Q.top()
Q.pop();
- 優先隊列自定義比較函數
前k個高頻元素
struct ComparePairFirst {bool operator()(const std::pair<int, int>& lhs, const std::pair<int, int>& rhs) const {return lhs.second > rhs.second;}
};
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int>>, ComparePairFirst> pq;
雙端隊列
滑動窗口最大值
deque<int> q;
q.front()
q.back()
q.push_front()
q.pop_front()
q.push_back()
q.pop_back()
排序時自定義比較函數
使用lambda表達式:
auto compare = [](int a, int b) { return a > b; };
std::priority_queue<int, std::vector<int>, decltype(compare)> ascendingPQ(compare);
使用結構體:
sort(intervals.begin(), intervals.end(),[](const vector<int>& a, const vector<int>& b) {return a[0] < b[0];}); //小頂堆
最大數值
#include <climits>
INT_MAX
字符串
追加:
- 使用運算符
+=
:
std::string str = "example";
str += 'a'; // 現在 str 是 "examplea"
- 使用
append
成員函數:
std::string str = "example";
str.append(1, 'a'); // 現在 str 是 "examplea"
這里,append
函數的第一個參數是追加字符的數量(在這個例子中是1),第二個參數是要追加的字符。
刪除:
在C++中,要刪除std::string
類型的字符串的最后一個字符,可以采用以下幾種方法:
-
使用
pop_back()
方法:std::string str = "example"; str.pop_back(); // 刪除最后一個字符,現在 str 是 "exampl"
pop_back()
函數直接刪除字符串末尾的字符。 -
使用
erase()
方法:std::string str = "example"; str.erase(str.length() - 1); // 或者 str.erase(str.end() - 1); // 刪除最后一個字符,現在 str 是 "exampl"
erase()
方法可以刪除指定位置的字符或字符范圍,這里用來刪除最后一個字符。
子串:
std::string str = "Hello, World!";
std::string subStr = str.substr(7, 5); // 從第7個字符開始,取5個字符長度的子串
元組
腐爛的橘子
queue<tuple<int, int, int>> q;
q.push({i, j, 0});
x = get<0>(ele);
vector
查找
std::vector<int>::iterator pos = std::find(vec.begin(), vec.end(), 3);
if(pos != vec.end()) {std::cout << "找到了元素3" << std::endl;
} else {std::cout << "沒有找到元素3" << std::endl;
}int lastElement = vec.back();
創建和初始化賦值:
std::vector<std::vector<int>> table(nums.size() + 1, std::vector<int>(target + 1, 0));
字典map
引入頭文件
#include <unordered_map>
定義和初始化
定義一個空的unordered_map
:
std::unordered_map<std::string, int> myMap;
或者定義并初始化一些元素:
std::unordered_map<std::string, int> myMap = {{"apple", 1},{"banana", 2},{"cherry", 3}
};
插入元素
使用insert
方法插入元素:
myMap.insert({"grape", 4});
也可以使用下標操作符[]插入,如果鍵不存在則插入,存在則修改其值:
myMap["orange"] = 5;
訪問元素
通過鍵訪問對應的值,如果鍵不存在,使用下標操作符會自動插入默認值(對于內置類型如int,默認為0):
int value = myMap["apple"];
使用find
方法查找鍵,返回一個迭代器:
auto it = myMap.find("banana");
if (it != myMap.end())
{std::cout << "Found: " << it->first << " -> " << it->second << std::endl;
}
else
{std::cout << "Not found!" << std::endl;
}
更新元素
直接通過下標操作符更新:
myMap["apple"] = 10; // 如果鍵存在,則更新其值
刪除元素
使用erase
方法刪除元素,可以通過鍵或迭代器刪除:
myMap.erase("banana");
// 或者
myMap.erase(it);
檢查元素存在
使用count
方法檢查鍵是否存在:
if (myMap.count("pear"))
{std::cout << "Pear exists in the map." << std::endl;
}
else
{std::cout << "Pear does not exist in the map." << std::endl;
}
或使用find
后檢查迭代器是否等于end()
。
遍歷元素
使用范圍基礎for循環遍歷:
for (const auto &pair : myMap)
{std::cout << pair.first << ": " << pair.second << std::endl;
}
int和string轉換
字符串解碼
stack<string> stk;
stk.push(to_string(mul));
int old_mul = stoi(stk.top()); stk.pop();