输入一整行
string s;
getline(cin, s);
char s[N];
cin.getline(s, N);
输入的字符串以逗号分隔
string s;
getline(cin, s);
stringstream ss(s);
char del = ',';
string tmp;
while(getline(ss, tmp, del)) {
…
}
字符串、数字互转
string s;
int i;
i = stoi(s);
s = to_string(i);
二进制中的第k位
对于一个数x
x的第k位:
(x >> k) & 1
x的最后一位1:
lowbit(x) [如x=101000,lowbit(x) = 1000]
实现原理: x & -x = x & (~x + 1)
原码x 0...01010
反码~x 1...10101
补码-x 1...10110
vector 数组
初始化
vector<T> v1
v1 是一个元素类型为T的空vector
vector<T> v2(v1)
使用v1中所有元素初始化v2
vector<T> v2 = v1
同上
vector<T> v3(n, val)
v3 中包含了n个值为 val 的元素
vector<T> v4{a, b, c...}
使用 a, b, c… 初始化v4
vector<vector<int>>; matrix(M,vector<int>(N));
二维数组初始化
基本使用
v.empty()
如果 v 为空则返回 true,否则返回 false
v.size()
返回 v 中元素的个数
v.push_back(val)
向 vector 的尾端添加值为 val 的元素。注意:vector 不支持 push_front 操作
v.pop_back(val)
删除尾元素,返回void。vector同样 不支持 pop_front 操作。若想在同时弹出元素的值,就必须在执行弹出之前保存它(可以使用 v.back())
v[n]
返回 v 中第 n 个位置上元素的引用,不能用下标操作添加元素
v.back()
返回 v 中最后一个元素的引用
v.front()
返回 v 中第一个元素的引用
v1 = v2
用 v2 中的元素替换 v1 中的元素
v1 = {a, b, c...}
用元素 {a, b, c…} 替换 v1 中的元素
v1 == v2
当且仅当拥有相同数量且相同位置上值相同的元素时,v1 与 v2 相等
<, <=, >, >=
以字典序进行比较
其他使用
sort(v.begin(), v.end());
排序
reverse(v.begin(), v.end());
逆序排序
unique(v.begin(), v.end())
将输入序列相邻的重复项“消除”,返回一个指向不重复值范围末尾的迭代器
v.erase(unique(v.begin(), v.end()), v.end());
去除重复元素
文件输入输出
#include <iostream>
#include <cstdio>
#include <fstream>
#include <sstream>
using namespace std;
int main() {
string a;
ifstream file;
ofstream ofile;
file.open("/Users/ajq/Desktop/2.txt");
ofile.open("/Users/ajq/Desktop/1.txt");
string tmp;
while(getline(file, a)) {
stringstream ss(a);
char del = ' ';
while(getline(ss, tmp, del)) {
printf("%s\n", tmp.c_str());
ofile << tmp << "\n";
}
}
file.close();
ofile.close();
return 0;
}