C++刷题必备Cheat Sheet

目录

字符串 string

容器

遍历

二维

队列

哈希

集合


字符串 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();     // 清空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值