赞
踩
- #include <vector>
- #include <iostream>
- #include <list>
- #include <algorithm>
-
- using namespace std;
-
- void print_element(int n)
- {
- cout << n << ' ';
- }
-
- void add_3(int& n)
- {
- n = n + 3;
- }
-
- int fun(int n)
- {
- return 2 * n;
- }
-
- bool func(int n)
- {
- return n < 10;
- }
- int main() {
- int a[] = {1, 2, 3, 4, 5};
- vector<int> v(a, a+5);
-
- // 这个for_each会不会改动到原数据取决于你在函数中怎么实现,因为源码中返回的是一个reference引用
- for_each(v.begin(), v.end(), print_element);
- cout << endl;
-
- for_each(v.begin(), v.end(), add_3);
-
- for_each(v.begin(), v.end(), print_element);
- cout << endl;
-
- list<int> l(15);
- for_each(l.begin(), l.end(), print_element);
- cout << endl;
-
- // copy其实就是for循环从begin到end,然后将里面的值赋值给第三个参数
- // 注意:第三个参数的空间必须是已经存在的,copy不会再分配空间
- copy(v.begin(), v.end(), l.begin());
- for_each(l.begin(), l.end(), print_element);
- cout << endl;
-
- // 从末尾开始拷贝
- copy_backward(v.begin(), v.end(), l.end());
- for_each(l.begin(), l.end(), print_element);
- cout << endl;
-
- list<int> l2(5);
- transform(v.begin(), v.end(), l2.begin(), fun);
- for_each(l2.begin(), l2.end(), print_element);
- cout << endl;
-
- // 替换
- vector<int> v2(a, a+5);
- replace(v2.begin(), v2.end(), 3, 13);
- for_each(v2.begin(), v2.end(), print_element);
- cout << endl;
-
- // 在拷贝的过程中替换(原数据不变,目标改变)
- vector<int> v3(a, a+5);
- list<int> l3(5);
- replace_copy(v3.begin(), v3.end(), l3.begin(), 13, 3);
- for_each(v3.begin(), v3.end(), print_element);
- cout << endl;
-
- for_each(l3.begin(), l3.end(), print_element);
- cout << endl;
-
- // 在拷贝的过程中执行某个动作
- replace_copy_if(v.begin(), v.end(), l3.begin(), func, 0);
- for_each(l3.begin(), l3.end(), print_element);
- cout << endl;
- return 0;
- }
-
- // 输出
- 1 2 3 4 5
- 4 5 6 7 8
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 4 5 6 7 8 0 0 0 0 0 0 0 0 0 0
- 4 5 6 7 8 0 0 0 0 0 4 5 6 7 8
- 8 10 12 14 16
- 1 2 13 4 5
- 1 2 3 4 5
- 1 2 3 4 5
- 0 0 0 0 0

- #include <iostream>
- using namespace std;
-
- #include <algorithm>
- #include <vector>
- #include <numeric>
-
- void print_element(int n)
- {
- cout << n << ' ';
- }
-
- int mult(int a, int b)
- {
- return a * b;
- }
-
- int main() {
- int a[] = {1, 3, 7,2, 3, 4, 5, 6, 7};
- vector<int> v(a, a + 9);
-
- for_each(v.begin(), v.end(), print_element);
- cout << endl;
-
- // 移除值为3
- // 首先查找给定第一个位置,然后遍历后面的元素,如果遇到要删除的元素,删除该元素
- // 然后将非删除的元素拷贝到前面,覆盖到前面的元素
- remove(v.begin(), v.end(), 3);
- for_each(v.begin(), v.end(), print_element);
- cout << endl;
-
- //如果要把里面的值删除
- int b[] = {1, 3, 7,2, 3, 4, 5, 6, 7};
- vector<int> v1(b, b + 9);
- v1.erase(remove(v1.begin(), v1.end(), 3), v1.end());
- for_each(v1.begin(), v1.end(), print_element);
- cout << endl;
-
- int c[] = {1, 2, 3, 4, 5, 6};
- vector<int> v2(c, c + 6);
- rotate(v2.begin(), v2.begin() + 2, v2.end());
- for_each(v2.begin(), v2.end(), print_element);
- cout << endl;
-
- // 排序
- sort(v2.begin(), v2.end());
- for_each(v2.begin(), v2.end(), print_element);
- cout << endl;
-
- // 已序区间排序
- int d[] = {1, 10, 10, 14, 15, 16};
- vector <int> v3(d, d + 6);
- vector<int>::iterator it;
- it = lower_bound(v3.begin(), v3.end(), 10);
- if(it != v3.end())
- {
- cout << it - v3.begin() << endl;
- }
-
- it = upper_bound(v3.begin(), v3.end(), 10);
- if(it != v3.end())
- {
- cout << it - v3.begin() << endl;
- }
-
- // 数值算法
- int e[] = {1, 2, 3, 4, 5};
- vector <int> v4(e, e + 5);
- for_each(v4.begin(), v4.end(), print_element);
- cout << endl;
- // 累加
- cout << accumulate(v4.begin(), v4.end(), 1) << endl;
- // 累乘
- cout << accumulate(v4.begin(), v4.end(), 1, mult) << endl;
- return 0;
- }
-
- // 输出
- 1 3 7 2 3 4 5 6 7
- 1 7 2 4 5 6 7 6 7
- 1 7 2 4 5 6 7
- 3 4 5 6 1 2
- 1 2 3 4 5 6
- 1
- 3
- 1 2 3 4 5
- 16
- 120

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。