-
-
[分享]《探索现代化C++》泛读笔记摘要13
-
发表于: 2022-9-22 08:40 4508
-
《探索现代化C++》泛读笔记摘要13
Chapter 4 C++库
容器
C++11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <iostream> #include <vector> #include <algorithm> int main() { using namespace std; vector< int > v = { 3 , 4 , 7 , 9 }; auto it = find(v.begin(),v.end(), 4 ); cout<< "After " << * it<< " comes " << * (it + 1 )<< '\n' ; auto it2 = v.insert(it + 1 , 5 ); / / insert value 5 at pos. 2 v.erase(v.begin()); / / delete entry at pos. 1 cout ≪ "Size = " << v.size() << ", capacity = " << v.capacity() << '\n' ; v.shrink_to_fit(); / / drop extra entries v.push_back( 7 ); for (auto i : v) cout ≪ i ≪ "," ; cout ≪ '\n' ; } |
C++11 emplace系列,如emplace_back,emplace_front。
1 2 3 | vector<matrix> v; v.push_back(matrix( 3 , 7 )); v.emplace_back( 7 , 9 ); / / 相比上面节省了拷贝或者移动构造的内存操作 |
常见容器vector,deque,list,forward_list,set,multiset,map,multimap,unordered_map( Hash Tables)
C++20 set 方法contains
1 2 3 4 | set < int > s = { 1 , 3 , 4 , 7 , 9 }; for ( int i = 0 ; i < 6 ; + + i) cout << i << "is" << (s.contains(i) ? " " : " n't") << " contained in s.\n" ; |
算法
算法主要定义在<algorithm>中,以及用于数字计算的<numeric>。
非修改型序列操作
find
1 2 | vector< int > seq = { 3 , 4 , 7 , 9 , 2 , 5 , 7 , 8 }; auto it = find(begin(seq),end(seq), 7 ); |
find_if
1 2 3 4 5 6 7 | bool check( int i) { return i> 4 &&i< 7 ;} int main() { list < int > seq = { 3 , 4 , 5 , 7 , 8 , 9 , 2 , 8 }; auto it = find_if(begin(seq),end(seq),check); cout << "The first value in range is " << * it << '\n' ; } |
C++11 充分利用Lambda
1 | auto it = find_if(begin(seq),end(seq),[]( int i){ return i> 4 &&i< 7 ;}}; |
修改型序列操作
copy
1 2 3 | vector< int > seq = { 3 , 4 , 7 , 9 , 2 , 5 , 7 , 8 },v; v.resize(seq.size()); copy(begin(seq),end(seq),begin(v)); |
unique函数用于移除序列中的重复项。
1 2 3 4 | std::vector< int > seq = { 3 , 4 , 7 , 9 , 2 , 5 , 7 , 8 , 3 , 4 , 3 , 9 }; sort(begin(seq), end(seq)); auto it = unique(begin(seq), end(seq)); resize(distance(begin(seq), it)); |
排序操作
1 2 | vector< int > seq = { 3 , 4 , 7 , 9 , 2 , 5 , 7 , 8 , 3 , 4 , 3 , 9 }; sort(begin(seq), end(seq), []( int x, int y){ return x > y;}); |
数值操作
1 2 3 4 5 6 7 8 9 10 11 | vector< float > v = { 3.1 , 4.2 , 7 , 9.3 , 2 , 5 , 7 , 8 , 3 , 4 }, w( 10 ), x( 10 ), y( 10 ); iota(begin(w), end(w), 12.1 ); partial_sum(begin (v), end(v), begin(x)); adjacent_difference(begin(v), end(v), begin(y)); float alpha = inner_product(begin(w), end(w), begin(v), 0.0f ); float sum_w = accumulate(begin(w), end(w), 0.0f ), product_w = accumulate(begin(w), end(w), 1.0f , []( float x, float y){ return x * y; }); |
算法复杂性总结
$O(1)$:swap,iter_swap
$O(\log(n))$: lower_bound, upper_bound, equal_range, binary_search, push_heap, pop_heap
$O(n\log(n))$: inplace_merge, stable_partition, 所有的排序算法
$O(n^2)$: find_end, find_first_of, search, search_n
$O(n)$: 其他算法
赞赏
他的文章
- 定位Windows分页结构内存区域 6915
- [原创]2022年,工业级EDR绕过蓝图 28273
- [分享]《探索现代化C++》泛读笔记摘要20 完! 7311
- [分享]《探索现代化C++》泛读笔记摘要19 7562
- [原创]摘微过滤驱动回调的研究-续 10163
看原图
赞赏
雪币:
留言: