vector 向量 初始化 && 赋值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 vector <int > v;for (int i = 0 ; i < 5 ; i++) v.push_back(i);vector <int > v1 = v;vector <int > v2 (v) ;vector <int > v3 (v.begin(), v.end()) ;vector <int > v4 (50 ) ;vector <int > v5 (5 , 10 ) ;int arr[5 ] = { 0 , 1 , 2 , 3 , 4 };vector <int > v6 (arr, arr + sizeof (arr) / sizeof (int )) ;vector <int > v6;v6.assign(v.begin(), v.end()); vector <int > v7;v7.swap(v);
访问 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 vector <int > v;for (int i = 0 ; i < 5 ; i++) v.push_back(i);v.begin(); v.end(); v.rbegin(); v.rend(); v.front(); v.back();
个数/判空/重置/容量/预留 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 vector <int > v;for (int i = 0 ; i < 5 ; i++) v.push_back(i);v.size(); v.empty(); v.resize(20 ); v.resize(20 , 1 ); v.capacity(); v.reserve(50 );
存取/插入/删除 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 vector <int > v;for (int i = 0 ; i < 5 ; i++) v.push_back(i);v.at(4 ); v[4 ]; v.insert(v.begin() + 1 , 5 , 0 ); v.push_back(0 ); v.pop_back(); v.erase(v.begin() + 3 ); v.erase(v.begin() + 3 , v.begin() + 4 ); v.clear();
string 字符串 初始化 1 2 3 4 string s1; string s2 (5 , 'x' ) ; string s3 ("Hello World" ) ; string s4 (s3) ;
拼接 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 string s = "abc" ;string s2 = "def" ;string ch = "d" ;s += 'd' ; s += ch; s += s2; s += "def" ; s.append(s2); s.append(s2, 2 ); s.append(s2, 1 , 2 ); cout << s << endl ;s.append(5 , 'x' );
查找和替换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 string s = "123456123456" ; s.find("123" ); s.find("123" , 4 ); s.find("123" , 4 , 3 ); s.replace(0 , 4 , "99" );
比较 1 2 3 4 5 6 7 8 9 string s1 = "abc" ; string s2 = "abd" ; s1.compare(s2);
子串/插入和删除 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 string s = "123456789" ; string s_sub = s.substr(1 , 6 ); s.insert(1 , "aaa" ); s.insert(1 , 3 , 'a' ); s.erase(0 , 6 ); s.erase(6 );
deque 双端数组 初始化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 deque <int > d;for (int i = 0 ; i < 5 ; i++) d.push_back(i);deque <int > d1 = d;deque <int > d2 (d) ;deque <int > d3 (d.begin(), d.end()) ;deque <int > d4 (50 ) ;deque <int > d5 (5 , 10 ) ;int arr[5 ] = { 0 , 1 , 2 , 3 , 4 };deque <int > d6 (arr, arr + sizeof (arr) / sizeof (int )) ;deque <int > d6;d6.assign(d.begin(), d.end()); deque <int > d7;d7.swap(d);
访问 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 deque <int > d;for (int i = 0 ; i < 5 ; i++) d.push_back(i);d.begin(); d.end(); d.rbegin(); d.rend(); d.front(); d.back();
个数/判空/重置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 deque <int > d;for (int i = 0 ; i < 5 ; i++) d.push_back(i);d.size(); d.empty(); d.resize(20 ); d.resize(20 , 1 );
存取/插入/删除 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 deque <int > d;for (int i = 0 ; i < 5 ; i++) d.push_back(i); d.at(4 ); d[4 ]; d.insert(d.begin() + 1 , 5 , 0 ); d.push_front(0 ); d.push_back(0 ); d.pop_back(); d.pop_front(); d.erase(d.begin() + 3 ); d.erase(d.begin() + 3 , d.begin() + 4 ); d.clear();
list 链表 初始化 1 2 3 4 5 6 7 8 9 10 list <int > l1;list <int > l2 (l1.begin(), l1.end()) ;list <int > l3 (3 , 5 ) ;list <int > l4 (l1) ;
数据的存取/删除/清空 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 list <int > lis;lis.front(); lis.back(); lis.push_back(6 ); lis.push_front(1 ); lis.pop_back(); lis.pop_front(); lis.insert(lis.begin(), 5 ); lis.insert(lis.begin(), 5 , 5 ); lis.clear(); lis.erase(lis.begin(), lis.end()); lis.erase(lis.begin()); lis.remove(10 );
容器中元素的个数/判空/容量重设/反转 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 lis.size(); lis.empty(); lis.resize(20 ); lis.resize(20 , 1 ); lis.reverse();
内置排序 1 2 3 4 5 6 7 8 9 10 11 lis.sort(); bool myCompare (int v1, int v2) { return v1 > v2; } lis.sort(myCompare);
queue 队列 #Cpp/STL/queue
不能进行遍历, 不提供迭代器, 不支持随机访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 queue <int > q;queue <int > q1 (q) ;q.push(10 ); q.pop(); q.front(); q.back(); q.empty(); q.size();
set/multiset 集合 #Cpp/STL/set #Cpp/STL/multiset
set和multiset的区别:set不允许相同的元素而multiset允许
不允许通过迭代器修改元素的值
但是可以删了再加进去
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 set <int > s; set <int > s2 (s) ; s2 = s; s2.swap(s); s.size(); s.empty(); s.insert(10 ); s.clear(); s.erase(pos); s.erase(beg, end); s.erase(elem); s.find(key); s.lower_bound(keyElem); s.upper_bound(keyElem); pair <set <int >::iterator, set <int >::iterator> pa = s.equal_range(key);
set更改默认排序 1 2 3 4 5 6 7 8 9 10 11 12 13 class myCompare {public: bool operator () (int v1, int v2) { return v1 > v2; } }; void test01 () { set <int , myCompare> s; }
stack 栈 栈不能遍历,不支持随机存取,只能通过top从栈顶获取和删除元素。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 stack <int > s;stack <int > s1 (s) ;s.push(10 ); s.pop(); s.top(); s.empty(); s.size();
map/multimap 映射 #Cpp/STL/map #Cpp/STL/multimap #Cpp/STL/pair
创建以string为键的map map的直接插入不需要判断是否存在
不加这个判断函数也可以,有时候加上了反而拉低了运行速度 。
1 2 3 4 5 #include <string.h> struct StrCmp { bool operator () (string l, string r) const { return strcasecmp (l.c_str (), r.c_str ()) < 0 ; } };
map按照value排序 1 2 3 4 5 6 7 8 9 10 struct CmpByValue { bool operator () (const pair<int , int >& lhs, const pair<int , int >& rhs) { return lhs.second > rhs.second; } }; vector<pair<int , int >> name_score_vec (name_score_map.begin (), name_score_map.end ()); sort (name_score_vec.begin (), name_score_vec.end (), CmpByValue ());
pair对组 1 2 3 4 5 6 7 8 9 10 11 12 13 pair <int , string > p = make_pair (1 , "No.1" ); pair <int , string > p1 (1 , "No.1" ) ; p1.first; p1.second; pair <int , string > p2 = p1;
map操作 map不允许相同的键值的存在但是multimap允许
不允许通过迭代器修改相应的键值
但是可以删了重建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 map <int , int > m; map <int , int > m1 (m) ; m1 = m; m.swap(m1); m.size(); m.empty(); m.insert(pair <int , int >(10 , 10 )); m.insert(make_pair (10 , 10 )); m.insert(map <int , int >::value_type(10 , 10 )); m[10 ] = 10 ; map <int , int >::iterator it = m.begin(); (*it).first; (*it).second; map <int , int > s; s.find(key); s.lower_bound(keyElem); s.upper_bound(keyElem); pair <map <int , int >::iterator, map <int , int >::iterator> res = s.equal_range(key);
priority queue 优先级队列 #Cpp/STL/priority_queue
操作 1 2 3 4 5 6 7 8 9 pq.empty () pq.pop () pq.push () pq.size () pq.top ()
设置优先级 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 struct cmp1 { bool operator () (int &a,int &b) { return a>b; } }; priority_queue<int ,vector<int >,cmp1>pq; struct cmp2 { bool operator () (int &a,int &b) { return a<b; } }; priority_queue<int ,vector<int >,cmp2>pq2; struct node { friend bool operator < (node n1, node n2) { return n1. priority < n2. priority; } int priority; int value; }; priority_queue<node> pq4;
参考
STL查找算法 find 查找制定元素出现位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 find(iterator begin, iterator end, value); find(开始迭代器, 结束迭代器, 查找的元素) void test () { vector <int >v; for (int i = 0 ; i < 10 ; i++) v.push_back(i); vector <int >v1; vector <int >::iterator it = find(v.begin(), v.end(), 5 ); } class Person { public: Person(string name, int age) : m_Age(age), m_Name(name) {} bool operator==(const Person& p) { if (this->m_Age == p.m_Age && this->m_Name == p.m_Name) return true ; else return false ; } string m_Name; int m_Age; }; void test () { vector <Person> v; Person p1 ("aa" , 10 ) ; Person p2 ("bb" , 20 ) ; Person p3 ("cc" , 30 ) ; Person p4 ("dd" , 40 ) ; v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); vector <Person>::iterator it = find(v.begin(), v.end(), p2); if (it == v.end()) cout << "Not Found" << endl ; else cout << "Name : " << (*it).m_Name << endl ; }
find_if 按条件查找元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 find_if(iterator beg, iterator end, _Pred); find_if(开始迭代器, 结束迭代器, 函数或者谓词); class GreatFive { public: bool operator () (int i) { return i > 5 ; } }; void test () { vector <int >v; for (int i = 0 ; i < 10 ; i++) v.push_back(i); vector <int >::iterator it = find_if(v.begin(), v.end(), GreatFive()); if (it == v.end()) cout << "Not Found" << endl ; else cout << *it << endl ; } class Person { public: Person(string name, int age) { this->m_Age = age; this->m_Name = name; } string m_Name; int m_Age; }; class Greater20 { public: int operator () (const Person& p) { return p.m_Age > 20 ; } }; void test () { vector <Person>v; Person p1 ("aa" , 10 ) ; Person p2 ("bb" , 20 ) ; Person p3 ("cc" , 30 ) ; Person p4 ("dd" , 40 ) ; v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); vector <Person>::iterator it = find_if(v.begin(), v.end(), Greater20()); if (it == v.end()) cout << "Not Found" << endl ; else cout << "Name : " << (*it).m_Name << endl ; }
adjacent_find 查找相邻重复元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 adjacent_find(iterator beg, iterator end); adjacent_find(开始迭代器, 结束迭代器); void test () { vector <int >v; v.push_back(1 ); v.push_back(2 ); v.push_back(2 ); v.push_back(3 ); v.push_back(3 ); v.push_back(4 ); v.push_back(5 ); vector <int >::iterator it = adjacent_find(v.begin(), v.end()); if (it == v.end()) cout << "Not Found" << endl ; else cout << *it << endl ; }
binary_search 查找指定元素是否存在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 binary_search(iterator beg, iterator end, value); binary_search(开始迭代器, 结束迭代器, 查找的元素); void test () { vector <int >v; v.push_back(1 ); v.push_back(2 ); v.push_back(3 ); bool it = binary_search(v.begin(), v.end(), 3 ); cout << it << endl ; }
count 统计元素个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 count(iterator beg, iterator end, value); count(开始迭代器, 结束迭代器, 统计的元素); void test () { vector <int >v; v.push_back(1 ); v.push_back(2 ); v.push_back(2 ); v.push_back(3 ); v.push_back(3 ); int it = count(v.begin(), v.end(), 3 ); cout << it << endl ; } class Person { public: Person(string name, int age) : m_Age(age), m_Name(name) {} bool operator==(const Person& p) { if (this->m_Age == p.m_Age) return true ; else return false ; } string m_Name; int m_Age; }; void test () { vector <Person>v; Person p1 ("aa" , 10 ) ; Person p2 ("bb" , 20 ) ; Person p3 ("cc" , 20 ) ; v.push_back(p1); v.push_back(p2); v.push_back(p3); Person p ("ee" , 20 ) ; int cnt = count(v.begin(), v.end(), p); cout << cnt << endl ; }
count_if 按条件统计元素个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 count_if(iterator beg, iterator end, _Pred); count_if(开始迭代器, 结束迭代器, 谓词); class Great3 { public: bool operator () (int i) { return i > 3 ; } }; void test () { vector <int >v; v.push_back(1 ); v.push_back(3 ); v.push_back(3 ); v.push_back(4 ); v.push_back(5 ); int it = count_if(v.begin(), v.end(), Great3()); cout << it << endl ; } class Person { public: Person(string name, int age) : m_Age(age), m_Name(name) {} string m_Name; int m_Age; }; class Greater20 { public: int operator () (const Person& p) { return p.m_Age > 20 ; } }; void test () { vector <Person>v; Person p1 ("aa" , 10 ) ; Person p2 ("bb" , 20 ) ; Person p3 ("cc" , 20 ) ; v.push_back(p1); v.push_back(p2); v.push_back(p3); int cnt = count_if(v.begin(), v.end(), Greater20()); cout << cnt << endl ; }
STL-遍历算法 for_each 用函数遍历元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 for_each(iterator begin, iterator end, _func); for_each(开始迭代器, 结束迭代器, _func函数或者函数对象); void print (int i) { cout << i << endl ; } class Print { public: void operator () (int i) { cout << i << endl ; } }; void test () { vector <int >v; for (int i = 0 ; i < 10 ; i++) v.push_back(i); for_each(v.begin(), v.end(), print); for_each(v.begin(), v.end(), Print()); }
将一个容器中的元素搬运容器到另一个容器中, 前提是目标容器需要提前开辟空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 transform(iterator begin1, iterator end1, iterator begin2, _func); transform(原容器开始迭代器, 原容器结束迭代器, 目标容器开始迭代器,函数或者函数对象(回调函数)); class Transform { public: int operator () (int i) { return i; } }; void test () { vector <int > v; for (int i = 0 ; i < 10 ; i++) v.push_back(i); vector <int > v1; v1.resize(v.size()); transform(v.begin(), v.end(), v1.begin(), Transform()); }
STL排序算法 sort 对容器内元素进行排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 sort(iterator beg, iterator end, _Pred); sort(开始迭代器, 结束迭代器, 谓词); class Great3 { public: bool operator () (int v1, int v2) { return v1 > v2; } }; void test () { vector <int >v; v.push_back(1 ); v.push_back(2 ); v.push_back(3 ); v.push_back(4 ); v.push_back(5 ); sort(v.begin(), v.end(), Great3()); for (auto i : v) cout << i << endl ; } class Person { public: Person(string name, int age) : m_Age(age), m_Name(name) {} string m_Name; int m_Age; }; class Greater20 { public: bool operator () (const Person& p1, const Person& p2) { return p1.m_Age > p2.m_Age; } }; void test () { vector <Person>v; Person p1 ("aa" , 10 ) ; Person p2 ("bb" , 20 ) ; Person p3 ("cc" , 20 ) ; Person p4 ("dd" , 40 ) ; v.push_back(p1); v.push_back(p2); v.push_back(p3); v.push_back(p4); sort(v.begin(), v.end(), Greater20()); for (auto i : v) { cout << i.m_Age << i.m_Name << endl ; } }
random_shuffle 指定范围内的元素随机调整次序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 random_shuffle(iterator beg, iterator end); random_shuffle(开始迭代器, 结束迭代器); void test () { vector <int >v; v.push_back(1 ); v.push_back(2 ); v.push_back(3 ); v.push_back(4 ); v.push_back(5 ); random_shuffle(v.begin(), v.end()); for (auto i : v) cout << i << endl ; } void test () { srand((unsigned int )time(NULL )); vector <int >v; v.push_back(1 ); v.push_back(2 ); v.push_back(3 ); v.push_back(4 ); v.push_back(5 ); random_shuffle(v.begin(), v.end()); for (auto i : v) cout << i << endl ; }
merge 两个容器元素合并, 并存储到另一容器中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); merge(容器1 开始迭代器, 容器1 结束迭代器, 容器2 开始迭代器, 容器2 结束迭代器, 目标容器开始迭代器); void test () { vector <int >v; vector <int >v1; vector <int >vt; for (int i = 0 ; i < 5 ; i++) v.push_back(i); for (int i = 5 ; i < 10 ; i++) v1.push_back(i); vt.resize(v.size() + v1.size()); merge(v.begin(), v.end(), v1.begin(), v1.end(), vt.begin()); for (auto i : vt) cout << i << " " ; }
reverse 将容器内元素进行反转
1 2 3 4 5 6 7 8 9 10 11 12 reverse(iterator beg, iterator end); reverse(开始迭代器, 结束迭代器); void test () { vector <int >vt; for (int i = 0 ; i < 5 ; i++) vt.push_back(i); reverse(vt.begin(), vt.end()); for (auto i : vt) cout << i << " " ; }
STL集合算法 set_intersection
使用时包含的头文件为#include < algorithem >
求两个容器的交集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); set_intersection(容器1 开始迭代器, 容器1 结束迭代器, 容器2 开始迭代器, 容器2 结束迭代器, 目标容器开始迭代器); void test () { vector <int > v1; vector <int > v2; vector <int > v3; for (int i = 0 ; i < 5 ; i++){ v1.push_back(i); v2.push_back(i + 2 ); } v3.resize(v1.size() + v2.size()); set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); for (auto i : v3) { cout << i << " " ; } }
set_union
使用时包含的头文件为#include < algorithem >
求两个集合的并集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); set_union(容器1 开始迭代器, 容器1 结束迭代器, 容器2 开始迭代器, 容器2 结束迭代器, 目标容器开始迭代器); void test () { vector <int > v1; vector <int > v2; vector <int > v3; for (int i = 0 ; i < 5 ; i++){ v1.push_back(i); v2.push_back(i + 2 ); } v3.resize(v1.size() + v2.size()); set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); for (auto i : v3) { cout << i << " " ; } }
set_difference
使用时包含的头文件为#include < algorithem >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest); set_difference(容器1 开始迭代器, 容器1 结束迭代器, 容器2 开始迭代器, 容器2 结束迭代器, 目标容器开始迭代器); void test () { vector <int > v1; vector <int > v2; vector <int > v3; for (int i = 0 ; i < 5 ; i++){ v1.push_back(i); v2.push_back(i + 2 ); } v3.resize(v1.size() + v2.size()); set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); for (auto i : v3) { cout << i << " " ; } }
STL拷贝和替换算法 copy 容器内指定范围的元素拷贝到另一容器中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 copy(iterator eg, iterator end, iterator dest); copy(开始迭代器, 结束迭代器, 目标起始迭代器); void test () { vector <int >v1; vector <int >v2; for (int i = 0 ; i < 5 ; i++) v1.push_back(i); v2.resize(v1.size()); copy(v1.begin(), v1.end(), v2.begin()); for (auto i : v2) cout << i << " " ; }
replace 将容器内指定范围的所有旧元素修改为新元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 replace(iterator beg, iterator end, oldvalue, newvalue); replace(开始迭代器, 结束迭代器, 旧元素, 新元素); void test () { vector <int > v; v.push_back(1 ); v.push_back(1 ); v.push_back(2 ); v.push_back(3 ); replace(v.begin(), v.end(), 1 , 10 ); for (auto i : v) { cout << i << " " ; } }
replace_if 将区间内满足条件的元素, 替换成指定元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 replace_if(iterator beg, iterator end, _pred, newvalue); replace_if(开始迭代器, 结束迭代器, 谓词, 替换的新元素); class Greater2 {public: bool operator () (int x) { return x > 2 ; } }; void test () { vector <int > v; v.push_back(1 ); v.push_back(1 ); v.push_back(2 ); v.push_back(3 ); replace_if(v.begin(), v.end(), Greater2(), 0 ); for (auto i : v) { cout << i; } }
swap 互换两个容器的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 swap(container c1, container c2); swap(容器1 , 容器2 ); void test () { vector <int > v; v.push_back(1 ); v.push_back(1 ); v.push_back(2 ); v.push_back(3 ); vector <int > v1; swap(v, v1); }
STL填充算法 accumulate
使用时包含的头文件为#include < numeric >
返回区间内容器元素累计总和
1 2 3 4 5 6 7 accumulate(iterator beg, iterator end, value); accumulate(开始迭代器, 结束迭代器, 起始值); void test () { vector <int > v (5 , 10 ) ; accumulate(v.begin(), v.end(), 0 ); }
fill
使用时包含的头文件为#include < numeric >
向容器中填充指定的元素
1 2 3 4 5 6 7 fill(iterator beg, iterator end, vale); fill(开始迭代器 , 结束迭代器, 填充的值); void test () { vector <int > v (10 , 0 ) ; fill(v.begin(), v.end(), 1 ); }