C++刷题 常用模板

下面记录一下C++ 刷题的常用模板,基于c++ 17

输入处理

//待处理的字符串
string s = "a   */b/c *  */d";
//istringstream 用于出来输入的数据
istringstream iss(s);
//隔开后提取的字符串
string buffer;
//循环读取到buffer中,如果出现 a//b 输出第二行会有个空行,即buffer为""
while (getline(iss, buffer, '/')) {
    cout << buffer << endl;
}

string data = "     aaaa        bbbb         c     ";
istringstream p(data);
vector<string> pt;
string in;
//第二种方式,只能默认的隔开空格,a前面的空格会被舍弃,不会有多的空行
while (p >> in) {
    //如果有多个空格的字符串,用in != "" 来加入到动态数组中
    cout << in << endl;
}

//getline 遇到特定字符截取
string sq;
getline(cin, sq, ',');

优先队列

sort(intervals.begin(), intervals.end(), [](vector<int> &a, vector<int> &b) { return a[0] < b[0]; });
function<bool(vector<int> &, vector<int> &)> cmp1 = [](vector<int> &a, vector<int> &b) {
    return a[1] > b[1];
};
auto cmp = [](vector<int> &a, vector<int> &b) {
    return a[1] > b[1];
};
priority_queue<vector<int>, vector<vector<int>>, decltype(cmp)> q(cmp);


priority_queue 可以套tuple,比如
priority_queue<tuple<double , int ,int>>q ,默认按第一个降序
tuple 取元素的语句为: get<1>(t),取tuple t 的第二个元素

vector用法

// 初始化
//  p为10 个 2
vector<int> p(10, 2);
// 数组赋值
int a[] = {1, 2, 3, 4};
vector<int> p2(a, a + 4);
//迭代器赋值
vector<int> p3(p2.begin(), p2.begin() + 2);

// assign 复制
p.assign(p3.begin(), p3.end());

// resise 重新定义大小,带一个参数为控制大小到指定,第二个参数为 比原来多的空间补2
p.resize(10, 2);

//erase 删除迭代器元素,迭代器会指向当前的下一个元素, 一个参数为删除该迭代器一个元素
p.erase(p.begin());
//如果有两个参数,删除位置为前闭后开 [)
p.erase(p.begin(), p.begin() + 3);

//insert 第一个参数为插入位置,插入位置为迭代器的位置,有两个参数时 第二个参数为插入的元素
p.insert(p.begin(), 2);
//如果第三个参数,分别为(x,y,z) 则表示在x处 插入y 个 z
p.insert(p.begin() + 1, 3, 2);

set用法

//set 初始化
set<int> s1(p.begin(), p.end());
set<int> s2(a, a + 4);
set<int> inst;
cout << endl;
// 求集合s1,s2的交集,set_union 为并集,set_difference 为补集, 将集合得到的结果插入到inserter 中,第一个参数为 集合,第二个参数为插入的位置
set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(inst, inst.begin()));

string 用法

//string 初始化
string s = "123456";
// 从以S下标0 开始,长度为2的字符串初始化 S1 ,如果是两个参数,则从 下标到字符串结束的位置
string S1(s, 0, 2);
// 字符的前两个字符当做S2
string S2("1233333", 2);
//S3 为10个v,只能是第二个参数只能是字符
string S3(10, 'v');

//将s2 pos 开始的第n 个字符,替换成字符串S
S2.replace(pos, n, char * );
//将s2 pos 开始的第n1 个字符,替换成n2 个字符
S2.replace(pos, n1, n2, char);
// [ite1,ite2)的字符替换为字符串
S2.replace(ite1, ite2, char * );

// 截取 S2 n1下标,长度为n2 的字符串
S2.substr(n1, n2);

// 从n的位置寻找字符串s,返回索引下标,未找到返回-1
S2.find(char * s, n);
// 寻找字符,返回索引下标
S2.find(char s, n);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值