C++的那些事:容器和泛型算法】的更多相关文章

一.顺序容器 1,标准库定义了3种类型的顺序容器:vector.list和deque.它们的差别主要在于访问元素的方式,以及添加或删除元素相关操作运算代价.标准库还提供了三种容器适配器:stack.queue和priority_queue. 2,将一个容器复制给另一个容器时,类型必须匹配,包括容器类型和元素类型. vector<int> ivec; vector<double> dvec(ivec); //error list<int> ilist(ivec); //…
一.顺序容器 1.容器的选择 (1) 随机访问,选vector ,deque (2) 在中间插入或者删除元素,选list (3) 在头尾插入或删除元素 , 选deque 2.list的成员函数 (1)lst.sort() (2)lst.unique()   // 会把list中相邻重复的元素删除,而unique算法只是使不重复的元素出现在序列的开始部分 3.迭代器的分类 4.迭代器能力排行 : 输入输出迭代器 < 前向迭代器 < 双向迭代器 < 随机访问迭代器 (输入输出迭代器只能用于单…
标准库未给容器添加大量功能,而是提供一组独立于容器的泛型算法 算法:它们实现了一些经典算法的公共接口 泛型:它们可用于不同类型的容器和不同类型的元素 利用这些算法可实现容器基本操作很难做到的事,例如查找/替换/删除特定值.重排顺序等 10.1 概述 大多数算法定义在algorithm头文件中,另外一组数值算法定义在numeric头文件中 标准库算法不直接操作容器,而是遍历两个迭代器指定的元素范围 指针就像内置数组上的迭代器,故泛型算法也可操作内置数组和指针 find算法: 作用:将范围中每一个元…
概述 大多数算法都定义在algorithm头文件中. Note:算法永远不会执行容器操作 泛型算法本身不会执行容器的操作,而是通过迭代器来访问.修改等操作 10.1 题目要求读取数据存入vector,并实现用户可以查找的值出现在vector中的次数,所以可以考虑用户查找文件中某个数出现的次数,所以可以考虑文件操作 int main(int argc, char* argv[]) { ifstream infile(argv[]); if (!infile) cerr << "can…
<C++ Primer 4th>读书笔记 标准容器(the standard container)定义了很少的操作.标准库并没有为每种容器类型都定义实现这些操作的成员函数,而是定义了一组泛型算法:因为它们实现共同的操作,所以称之为“算法”:而“泛型”指的是它们可以操作在多种容器类型上——不但可作用于 vector 或 list 这些标准库类型,还可用在内置数组类型.甚至其他类型的序列上. 标准算法固有地独立于类型,与容器的类型无关:在前面的描述中,没有任何内容依赖于容器类型.这种算法只在一点上…
大多数算法都定义在<algorithm>头文件里,而标准库还在头文件<numeric>里定义了一组数值泛型算法,比如accumulate. ●  find算法,算法接受一对迭代器表示要搜寻的范围,还接受一个给定的值,算法从给定的范围内查找,返回指向第一个等于给定值的元素的迭代器,若没有找到,则返回第二个参数. int val = 5; vector<int> vec = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; auto find_val…
泛型算法的基础是迭代器. 迭代器令算法不依赖于容器,但是算法依赖于元素类型的操作.也即:算法永远不会执行容器的操作. 那么,如果想向容器中添加元素或者执行其他的一些操作呢?标准库提供了插入迭代器来完成.但算法自身永远不会做这样的操作. 理解算法最基本的方法是:了解它们是否读取元素.改变元素.或是重排元素. 只读算法 ); //第三个参数类型决定了函数中使用哪个加法运算符及返回值类型 这里面蕴含着一个编程假定:将元素类型加到和的类型上的操作是可行的. string sum = accumulate…
STL实践与分析 --容器特有的算法 与其它顺序容器所支持的操作相比,标准库为list容器定义了更精细的操作集合,使它不必仅仅依赖于泛型操作.当中非常大的一个原因就是list容器不是依照内存中的顺序进行布局的,不支持随即訪问,这样,在list容器上就不能使用随即訪问迭代器的算法,如sort等:还有其它的一些算法如:merge.remove.reverse和unique,尽管能够用在list上,但却付出了高昂的性能代价.因此标准库结合list的内部结构,编写出了更快算法: list容器特有的操作…
练习10.1:头文件algorithm中定义了一个名为count的函数,它类似find,接受一对迭代器和一个值作为参数.count返回给定值在序列中出现的次数.编写程序,读取int序列存入vector中,打印有多少个元素的值等于给定值. #include <iostream> #include <algorithm> #include <vector> int main() { std::vector<, , , , , , , , , }; std::cout…
本文中算法都是指泛型算法. 基本要点: 1)算法使用迭代器进行操作. 2)不依赖容器,但容器希望使用算法,就必须提供接口. 3)通用算法永远不会执行容器操作.操作仅指:更改容器大小的操作.但,容器内部的算法不包括在通用中. 4)算法使用一个 可调用对象 来对元素进行操作.可 调用对象 通常为函数. 1,算法通常使用默认操作符 [<],[==],[>] 等. 2,本质上就是调用一个对象作为算法的比较. 3,通常的方式有:谓词,操作符重载,lambda表达式. 5)算法不检查写操作:即算法写入元素…