October
27th,
2017
1. init
// 大量数据时,cin、cout很慢
scanf("%d%d", &l, &r);
printf("%d\n", a);
char s[10];
getchar();
gets(s); // c++14不支持
scanf("%s", s);
// 2D-array init
memset(array, val, 101 * 101 * sizeof(int));
set<int> iset(ivec.begin(), ivec.end());
set1.insert(set2.begin(), set2.end());
struct cmp{
bool operator()(pair<ll,ll> p1, pair<ll,ll> p2){
return p1.first < p2.first; // 由小到大
}
};
bool cmp1(pair<int,int> p1, pair<int,int> p2){
return p1.second < p2.second;
}
priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, cmp> q;
priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, cmp1> q;
auto comp = [](pair<int,int> a, pair<int,int> b) { return a.second > b.second; };
priority_queue<pair<int, int>, vector<pair<int,int>>, decltype(comp)> p(comp);
numeric_limits<int>::max()
iota(v.begin(), v.end(), 0); // range(0,n,1)
2. transformation
int i = stoi(s); //stof, stod, stol ,stoll...
string s = to_string(i);
strcpy(arr, string.c_str());
string s = arr;
vector<string> split(const string& s, const string& delim) {
vector<string> elems;
size_t pos = 0;
size_t len = s.length();
size_t delim_len = delim.length();
if (delim_len == 0) return elems;
while (pos < len) {
int find_pos = s.find(delim, pos);
if (find_pos < 0) {
elems.push_back(s.substr(pos, len - pos));
break;
}
elems.push_back(s.substr(pos, find_pos - pos));
pos = find_pos + delim_len;
}
return elems;
}
### 3. unordered_map
~~~cpp
auto map_it = map.begin();
cout << map_it->first << map_it->second;
auto ret = map.insert(make_pair(key, value));
if(!ret.second)
ret.first->second++;
struct hashfunc {
template<typename T, typename U>
size_t operator()(const pair<T, U> &x) const {
return hash<T>()(x.first) ^ hash<U>()(x.second);
}
};
unordered_map<pair<int, int>, int, hashfunc> func_map;
4. stl
sort(v.begin(), v.end());
partial_sort(v.begin(), v.begin()+n, v.end()); // 得到前n小的元素
nth_element(v.begin(), v.begin()+n, v.end()); // 第n+1小的元素在第n位,比n+1小的在前面,
// 比n+1大的在后面
auto it = partition(v.begin(), v.end(), func); // 将满足func的放在前面,内部无序
5. others
// map
transform(v.begin(), v.end(), out.begin(), [](int i){ return i+10; });
// filter
vector<int> v(10, 0); // out有足够的容量
auto it = remove_copy_if(v.begin(), v.end(), out.begin(), [](int i){ return i>3&&i<8; });
out.erase(it, out.end());
vector<int> v; // out未初始化,调用back_inserter(out),适合所有支持push_back的容器
remove_copy_if(v.begin(), v.end(), back_inserter(out), [](int i){ return i>3&&i<8; });
// reduce
accumulate(v.begin(), v.end(), 0.0, [](int i, int j){ return i-j; });