Vector 遍历
vector<int> v1{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10};
通过数组下标遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| for (size_t i = 0; i < v1.size(); i++) { cout << v1[i] << "; "; } cout << endl; for (size_t i = 0; i < v1.size(); i++) { cout << v1.at(i) << "; "; } cout << endl; 2; 3; 4; 5; 6; 7; 8; 9; 10; 10; 10; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 10;
|
通过迭代器遍历
1 2 3 4 5 6
| for (vector<int>::iterator iter = v1.begin(); iter != v1.end(); iter++) { std::cout << *iter << "; "; } cout << endl; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 10;
|
auto 关键字遍历
1 2 3 4 5 6 7 8 9 10 11 12 13
| for (auto iter = v1.begin(); iter != v1.end(); iter++) { cout << *iter << "; "; } cout << endl;
for (auto i : v1) { cout << v1[i] << "; "; } cout << endl; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 10; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 10;
|
for_each 加函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <iostream> #include <vector> #include<algorithm>
using namespace std;
template<typename T> void printer(const T& val) { cout << val << "; "; }
void main() { for_each(v1.cbegin(), v1.cend(), printer<int>); cout << endl; }
1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 10;
|
计时方法 chrono
传统计时方法:
1 2 3 4 5 6 7
| #include <ctime> using namespace std;
clock_t start = clock();
clock_t end = clock(); cout << "花费了" << (double)(end - start) / CLOCKS_PER_SEC << "秒" << endl;
|
此方法可以精确到毫秒,输出样例:花费了0.123秒
C++11 最佳计时方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <chrono> using namespace std; using namespace chrono;
auto start = system_clock::now();
auto end = system_clock::now(); auto duration = duration_cast<microseconds>(end - start); cout << "花费了" << double(duration.count()) * microseconds::period::num / microseconds::period::den << "秒" << endl;
|
Vector 去重
使用场景上来说 vector不便于做删除操作 所以一般vector的删除需要借助别的数据结构。
方法一:使用 set
1 2 3 4 5
| void RemoveRepeat1(vector<int>& vec) { set<int> setVec(vec.begin(), vec.end()); vec.assign(setVec.begin(), setVec.end()); }
|
方法二: 使用 sort + unique 函数
1 2 3 4 5 6 7 8 9 10
| void RemoveRepeat2(vector<int> &vec) { sort(vec.begin(),vec.end()); auto it = unique(vec.begin(), vec.end());
vec.erase(it, vec.end()); }
|
map 插入数据的方法
在构造map容器后,我们就可以往里面插入数据了。这里有三种插入数据的方法:
方法一: 用 insert 函数插入 pair 数据
1 2
| map<int, string> mapStudent; mapStudent.insert(pair<int, string>(1,“student_one”));
|
方法二: 用 insert 函数插入 value_type 数据
1 2
| map<int, string> mapStudent; mapStudent.insert(map<int, string>::value_type (1,"student_one"));
|
方法三: 用 make_pair
1
| mapStudent.insert(make_pair(1, "student_one"));
|
方法四: 用数组方式插入数据
1 2 3 4 5 6 7 8 9
| map<int, string> mapStudent; mapStudent[1] = “student_one”; mapStudent[2] = “student_two”;
map<string, int> mapStudent; string s; m[s]++;
|
注: insert 函数插入数据,在数据的插入上,涉及到集合的唯一性这个概念,即当 map 中有这个关键字时,insert 操作是不能再插入这个数据的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值。
PS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <iostream> #include <map> #include <algorithm>
using namespace std;
int main() { map<int, string> m; m.insert(pair<int, string>(1, "a")); m.insert(make_pair(2, "b")); m.insert(map<int, string>::value_type(3, "c"));
for_each(m.cbegin(), m.cend(), [](const pair<int, string> &it) { cout << "first:" << it.first << " second:" << it.second << endl; }); return 0; }
|
那些年我们总会遇到的坑
curl
1 2
| CurlCXX curl(url, 1); curl.post(body);
|
- 注意学会
curl
发包的用法,并且post
时,body
当中要注意fastcgi
框架当中约定了post
数据格式为x-www-form-urlencoded/form-data
,因此一定要注意body
里面的数据,单个字段内不能出现容易导致解析错误的'&'
字符,若不得不包含'&'
字符,则要用转义字符'\&'
包起来,否则会导致参数错误。
const
1 2 3
| const CallRecord *app; app = app_ptr(); const_cast<CallRecord *>(app)->reload_cache();
|
- 注意对
const
类型的对象操作时,需要用const_cast<XXXXXX>
对该对象进行强制类型转换。