C++刷题必备Cheat Sheet

目录

字符串 string

容器

遍历

二维

队列

哈希

集合


字符串 string

#include 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的索引// insertstring 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 nums;      // 可不指定长度
vector nums(3)    // nums = {0,0,0}
vector nums(3, 1) // nums = {1,1,1}// 赋值
int b[] = {1,2,3,4,5,6,7};
vector a(b,b+3);         // a = {1,2,3}
vector b(a);             // b = a = {1,2,3}vector 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 
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 nums(4, 3);  //容器中有4个元素,值都为3
vector::iterator it;
for (it = nums.begin(); it != nums.end(); ++it)cout << *it << " ";// 遍历删除所有2
vector nums[6] = {1,2,2,2,3,4};
vector::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 > nums(m ,vector(n));// Option 2
vector > nums;
nums.resize(m);
for (int i = 0; i < m; i++) nums[i].resize(n);// Option 3
vector > nums;
nums.resize(m, vector(n));

队列

queue q;q.empty()     // 判空
q.size()      // 大小
q.pop()       // 删除队首元素,不返回值
q.front()     // 返回队首元素,不删除该元素
q.push(x)     // 添加队尾元素
q.back()      // 返回队尾元素,不删除该元素

stack s;s.empty();     // 判空
s.size();      // 大小
s.top();       // 返回栈顶元素, 不删除该元素
s.pop();       // 弹出栈顶元素, 不返回其值
s.push();      // 添加栈顶元素

哈希

#include 
unordered_map m;m.insert(pair(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 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 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();     // 清空


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部