目录
字符串 string
#include <string>
string str1 = "hello";
string str2 = "calma";
string str3;
str3 = str1; // str3 = "hello"
str3 = str1 + str2; // str3 = "hellocalma"
string s = "calma";
s.empty(); // 判空返回true/false
s.size(); // 字符串大小
s1.append(s2); // 在s1末尾添加s2
s1.find(s2); // 在s1中查找s2的索引
// insert
string s1 = "xxx";
string s2 = "yyy";
s1.insert(i, s2); // 在s1[i]插入字符串s2
s1.insert(1, s2); // s1 = "xyyyxx"
s1.insert(i, n, s2); // 在s1[i]插入n个字符串s2
s1.insert(1, 2, s2); // s1 = "xyyyyyyxx"
s1.insert(i, s2, j, n); // 在s1[i]插入s2[j]开始的n个字符
s1.insert(1, s2, 1, 2); // s1 = "xyyxx"
s1.replace(n1, n2, s2); // 将位置n1到n2间的字符串替换为s2
s.substr(n,m); // 返回位置n处长度为m的子字符串
容器
#include <vector>
// 初始化
vector<int> nums; // 可不指定长度
vector<int> nums(3) // nums = {0,0,0}
vector<int> nums(3, 1) // nums = {1,1,1}
// 赋值
int b[] = {1,2,3,4,5,6,7};
vector<int> a(b,b+3); // a = {1,2,3}
vector<int> b(a); // b = a = {1,2,3}
vector<int> a;
a.assign(b.begin(), b.begin()+3); // a = {1,2,3}
a.assign(3,2); // a = {2,2,2} 3个2
// 增减
// a = {1,2,3,4}
a.push_back(5); // a = {1,2,3,4,5}
a.pop_back(); // a = {1,2,3}
a.erase(a.begin()+2); // a = {1,2,4}
a.erase(a.begin()+1, a.begin()+3); // a = {1,4}
a.insert(a.begin()+1, 5); // a = {1,5,2,3,4}
a.insert(a.begin()+1, 3, 5); // a = {1,5,5,5,2,3,4}
// b = {5,6,7,8}
a.insert(a.begin()+1, b+1, b+4); // a = {1,6,7,8,2,3,4}
// 功能
a.front(); // 返回首元素
a.back(); // 返回末元素
a.clear(); // 清空a中的元素
a.empty(); // 判空
a.size(); // 返回元素个数
a.resize(10); // 调整大小为10,多删少补,值随机
a.resize(10, 2); // 调整大小为10,多删少补,值为2
a.capacity(); // 返回a的容量
a.reserve(100); // 将容量调到100
a.swap(b); // 调换a和b的元素
#include <algorithm>
sort(nums.begin(), nums.end()); // 排序
reverse(nums.begin(), nums.end()); // 翻转
copy(a.begin(), a.end(), b.begin()+1); // 复制a到b[1]
find(a.begin(),a.end(),10); // 找10的位置
遍历
// 遍历输出nums
vector<int> nums(4, 3); //容器中有4个元素,值都为3
vector<int>::iterator it;
for (it = nums.begin(); it != nums.end(); ++it)
cout << *it << " ";
// 遍历删除所有2
vector<int> nums[6] = {1,2,2,2,3,4};
vector<int>::iterator it;
for (it = nums.begin(); it != nums.end(); ) {
if (*it == 2) {
it = nums.erase(it);
} else {
it++;
}
}
二维
// m*n的二维数组;容器nums有m个元素,每个元素是有n个整型的容器
// Option 1
vector<vector<int> > nums(m ,vector<int>(n));
// Option 2
vector<vector<int> > nums;
nums.resize(m);
for (int i = 0; i < m; i++) nums[i].resize(n);
// Option 3
vector<vector<int> > nums;
nums.resize(m, vector<int>(n));
队列
queue<int> q;
q.empty() // 判空
q.size() // 大小
q.pop() // 删除队首元素,不返回值
q.front() // 返回队首元素,不删除该元素
q.push(x) // 添加队尾元素
q.back() // 返回队尾元素,不删除该元素
栈
stack<int> s;
s.empty(); // 判空
s.size(); // 大小
s.top(); // 返回栈顶元素, 不删除该元素
s.pop(); // 弹出栈顶元素, 不返回其值
s.push(); // 添加栈顶元素
哈希
#include <unordered_map>
unordered_map<int, int> m;
m.insert(pair<int, int>(1, 10)); // 插入
m[1] = 10; // 赋值
m.erase(1); // 删除1
// 功能
m.begin()
m.end()
m.find(2); // 返回key为2的迭代器,没有则返回m.end()
m.count(2); // 返回key为2的数量(1)
m.size(); // 大小
m.empty(); // 判空返回true/false
m.clear(); // 清空
swap(m1, m2);
// 遍历 option 1
unordered_map<int, int> hash;
for (auto element: hash) {
int key = element.first;
int val = element.second;
}
// 遍历 option 2
for(auto it = m.begin(); it != m.end(); it++)
{
int key = it->first;
int val = it->second;
}
集合
#include <unordered_set>
unordered_set s;
s.begin() // 首元素迭代器
s.end() // 末元素迭代器
s.empty() // 判空
s.size() // 大小
s.find(2) // 返回key为2的迭代器,没有则返回m.end()
s.count(2) // 返回key为2的个数
s.insert(2); // 添加2
s.emplace(2); // 添加2,效率比insert高
s.erase(2); // 删除2
s.clear(); // 清空