c++ Primer 第十章不熟悉知识点总结
2021-02-09 00:16
标签:str 占位符 相同 泛型 algorithm c++ prime form cto 泛型算法 (1)大多数算法都定义在头文件algorithm中。标准库还在头文件numeric中定义了一组数值泛型算法。 (2)只读算法 accumulate算法是求和算法,使用的是+运算符,所以我们也可以利用这个算法来把字符数组变成字符串。accumulate算法在头文件numeric equal判断两个容器中的元素是否相等。 (3)可写算法 fill算法。不能向空容器赋值,没办法赋值给不存在元素 back_inserter接受一个容器的引用,返回一个与该容器绑定的插入迭代器,头文件为iterator copy函数接受三个参数 (3)排算法 sort算法第三个参数默认降序排序,可以自己指定排序方法,stable_srot不会改变原来元素的顺序,但是sort是快速排序,所以可能会改变相同元素原来的位置。 unique函数是去重复函数,但是不会删除元素,只会删掉重复的值,然后没有值的元素在最后给了一个不确定的值。且区间是不包括最后一个元素的 (4)lambda [捕获列表](参数)-> 返回类型 { 函数体 } 其中[]和{}必不可少,其他的可以省略。 lambda的捕获的参数是在lambda创建时捕获的,不是在调用的时候,所以在lambda之后,参数被改变也不会影响lambda。 (5)transform函数 transform函数的作用是:将某操作应用于指定范围的每个元素。transform函数有两个重载版本: (6)bind函数可以看做是一个通用适配器,他接受一个可调用对象,生成一个新的可调用对象来适应对象的参数列表,定义在functional中 (7)插入迭代器 back_inserter 创建一个push_back迭代器 front_inserter 创建一个push_front迭代器 inserter 创建迭代器,第一个参数是容器,第二个参数必须是指向容器的迭代器。是把整个值插入到迭代器前面,而front_inserter是一个一个的插入到迭代器前面 (8)反向迭代器 c++ Primer 第十章不熟悉知识点总结 标签:str 占位符 相同 泛型 algorithm c++ prime form cto 泛型算法 原文地址:https://www.cnblogs.com/xiaodangxiansheng/p/12766665.html1 int ia[] = { 27, 23, 45, 56 };
2 int val = 56;
3 int* result = find(begin(ia), end(ia), val); //使用了便准库中begin和end函数
1 vectorchar> vec = {‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘};
2 string str = accumulate(vec.cbegin(), vec.cend(), string(""));
3 string str = accumulate(vec.cbegin(), vec.cend(), ""); //这样写是有问题的,因为“”是const char*,而这个类型没有+运算符,所以我们使用string类型的
1 vectorchar> vec = {‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘};
2 listchar> lis = { ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘f‘ };
3 bool temp = equal(vec.cbegin(), vec.cend(), lis.cbegin());
1 vectorchar> vec = {‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘};
2 listchar> lis = { ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘f‘ };
3 fill(vec.begin(), vec.end(), ‘a‘); //赋值给给定范围容器的元素
4 fill_n(vec.begin(), 7, ‘a‘); //从begin开始给7元素赋值,不能向空容器赋值,没办法赋值给不存在元素
1 vectorchar> vec = {‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘};
2 auto temp = back_inserter(vec);
3 *temp = ‘a‘; //增加了一个元素到vector中
4
5 vectorchar> vtr;
6 fill_n(back_inserter(vtr), 6, ‘h‘);
1 int arr1[] = { 1,2,3,4,5 };
2 int arr2[sizeof(arr1)];
3 copy(begin(arr1), end(arr1), arr2); //返回的是指向end(arr1)
1 bool myfunction(int x, int y)
2 {
3 return x > y;
4 }
5
6 int main()
7 {
8 int arr1[] = { 1,2,3,4,5 };
9 sort(begin(arr1), end(arr1), myfunction);
10 std::cin.get();
11 return 0;
12 }
1 vectorint> arr1 = { 1,2,3,4,5,3,2 };
2 sort(begin(arr1), end(arr1), myfunction);
3
4 auto temp = unique(begin(arr1), end(arr1)); //返回的引用是指向移到最后的原来重复的值的地方
5 arr1.erase(temp, arr1.end()); //我们需要把后面的删重后的无效值删除
1 for_each(arr1.begin(), arr1.end(), [](const int &s) { cout " "; });
transform(first,last,result,op);//first是容器的首迭代器,last为容器的末迭代器,result为存放结果的容器,op为要进行操作的一元函数对象或sturct、class。
transform(first1,last1,first2,result,binary_op);//first1是第一个容器的首迭代 器,last1为第一个容器的末迭代器,first2为第二个容器的首迭代器,result为存放结果的容器,binary_op为要进行操作的二元函数 对象或sturct、class。1 transform(arr1.begin(), arr1.end(), arr1.begin(), [](int x) {return x + 1; });
1 vectorint> arr1 = { 1,2,3,4,5,3,2 };
2 int a = 6;
3 find_if(arr1.begin(), arr1.end(), bind(getResult,std::placeholders::_1,a)) //bind去调用getResult函数,然后把参数给他。_1是占位符。placeholders是命名空间
4 find_if(arr1.begin(), arr1.end(), bind(getResult,std::placeholders::_1,_2)) //当然我们也可以写成这样,因为getResult有两个参数,完全可以由bind提供。1 vectorint> arr1 = { 1,2,3,4};
2 vectorint> arr2, arr3;
3 copy(arr1.cbegin(), arr1.cend(), front_inserter(arr2)); //结果是 4321
4 copy(arr1.cbegin(), arr1.cend(), inserter(arr3, arr3.begin())); //结果是 1234
1 char arr[] = "hello,world";
2 auto temp = find(rbegin(arr), rend(arr), ‘,‘); //找到逗号,返回指向逗号的迭代器
3 cout string(temp.base(), end(arr)) //这里使用base函数把temp反向迭代器改成正向
下一篇:数据结构与算法-图结构
文章标题:c++ Primer 第十章不熟悉知识点总结
文章链接:http://soscw.com/index.php/essay/52867.html