容器和算法
来源:互联网 发布:第二基地知乎 编辑:程序博客网 时间:2024/06/05 03:50
第二部分 容器和算法
**********************************************************************************************************************************
第9章 顺序容器
list - 顺序容器
vector、deque - 随机访问顺序容器,迭代器支持算术运算
map的erase方法:
该方法中利用了后++的特点,这个时候执行mapTest.erase(it++);这条语句分为三个过程
1、先把it的值赋值给一个临时变量做为传递给erase的参数变量
2、因为参数处理优先于函数调用,所以接下来执行了it++操作,也就是it现在已经指向了下一个地址
3、再调用erase函数,释放掉第一步中保存的要删除的it的值的临时变量所指的位置
如果只是mapTest.erase(it); 当这条语句执行完后,it就是一个非法指针,如果再执行++就会出错
问题:
1】只有list和deque支持push_front,而vector不支持,但vector是否可以使用vec.insert(vec.begin(), 1)来实现此功能呢?
可以
适配器 - 使一事物的行为类似于另一事物行为的机制,包括容器适配器、迭代器适配器和函数适配器。
容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。
**********************************************************************************************************************************
第11章 泛型算法
笔记:
1】11.2.3 对容器元素重新排序的算法 → 5.排序算法:
std::sort使用注意事项:
sort封装了快速排序算法,要求迭代器是随机迭代器,并且是可写的。
如果迭代器不是随机的,那么排序在理论上将变得非常低效;
如果迭代器是不可写,那么将无法进行排序,因为排序要求对迭代器指向的元素进行赋值操作。
如此std::sort算法要求迭代器是可写的随机迭代器。这一点要求使得我们不能在std::set、std::list等以结点形式存储的容器里使用std::sort。
参考:http://cpp.ezbty.org/content/science_doc/c%E6%A0%87%E5%87%86%E5%BA%93%EF%BC%9A%E4%BD%BF%E7%94%A8stdsort
2】11.2.3 对容器元素重新排序的算法 → 5.排序算法:unique、count_if算法的使用
问题:
1】11.2.3 对容器元素重新排序的算法 → 5.排序算法:标准库定义了四种不同的排序算法,除sort和stable_sort外,另外两种排序算法是?
11.2.3 插入迭代器 - back_inserter、front_inserter、inserter
back_inserter函数是一种插入器。插入器是一种迭代器适配器,带有一个容器参数,并生成一个迭代器,用于在指定容器中插入元素。
11.3.2 iostream迭代器 - sum = *item_iter++;运算符优先级该如何判定,是否可以写为:sum = *(item_iter++);?
可以,*与++优先级相同(2级),都是右结合性,因此先计算item_iter++,再将其返回值做解引用运算。
参考:
http://zhidao.baidu.com/question/41848360.html
http://clanguage.h.baike.com/article-74289.html
11.3.3 反向迭代器 - rbegin().base() == end()
迭代器适配器
http://blog.csdn.net/effective_coder/article/details/8733853
**********************************************************************************************************************************
第9章 顺序容器
list - 顺序容器
vector、deque - 随机访问顺序容器,迭代器支持算术运算
map的erase方法:
该方法中利用了后++的特点,这个时候执行mapTest.erase(it++);这条语句分为三个过程
1、先把it的值赋值给一个临时变量做为传递给erase的参数变量
2、因为参数处理优先于函数调用,所以接下来执行了it++操作,也就是it现在已经指向了下一个地址
3、再调用erase函数,释放掉第一步中保存的要删除的it的值的临时变量所指的位置
如果只是mapTest.erase(it); 当这条语句执行完后,it就是一个非法指针,如果再执行++就会出错
问题:
1】只有list和deque支持push_front,而vector不支持,但vector是否可以使用vec.insert(vec.begin(), 1)来实现此功能呢?
可以
适配器 - 使一事物的行为类似于另一事物行为的机制,包括容器适配器、迭代器适配器和函数适配器。
容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。
**********************************************************************************************************************************
第11章 泛型算法
笔记:
1】11.2.3 对容器元素重新排序的算法 → 5.排序算法:
std::sort使用注意事项:
sort封装了快速排序算法,要求迭代器是随机迭代器,并且是可写的。
如果迭代器不是随机的,那么排序在理论上将变得非常低效;
如果迭代器是不可写,那么将无法进行排序,因为排序要求对迭代器指向的元素进行赋值操作。
如此std::sort算法要求迭代器是可写的随机迭代器。这一点要求使得我们不能在std::set、std::list等以结点形式存储的容器里使用std::sort。
参考:http://cpp.ezbty.org/content/science_doc/c%E6%A0%87%E5%87%86%E5%BA%93%EF%BC%9A%E4%BD%BF%E7%94%A8stdsort
2】11.2.3 对容器元素重新排序的算法 → 5.排序算法:unique、count_if算法的使用
问题:
1】11.2.3 对容器元素重新排序的算法 → 5.排序算法:标准库定义了四种不同的排序算法,除sort和stable_sort外,另外两种排序算法是?
11.2.3 插入迭代器 - back_inserter、front_inserter、inserter
back_inserter函数是一种插入器。插入器是一种迭代器适配器,带有一个容器参数,并生成一个迭代器,用于在指定容器中插入元素。
11.3.2 iostream迭代器 - sum = *item_iter++;运算符优先级该如何判定,是否可以写为:sum = *(item_iter++);?
可以,*与++优先级相同(2级),都是右结合性,因此先计算item_iter++,再将其返回值做解引用运算。
参考:
http://zhidao.baidu.com/question/41848360.html
http://clanguage.h.baike.com/article-74289.html
11.3.3 反向迭代器 - rbegin().base() == end()
迭代器适配器
http://blog.csdn.net/effective_coder/article/details/8733853
0 0
- C++容器和算法
- 容器和算法
- 容器和算法
- C++容器和算法
- 容器和算法
- [C++]容器和算法
- 容器和算法
- 第二部分<容器和算法>--顺序容器
- 第二部分:容器和算法
- ACM STL容器和算法
- 顺序容器和简单算法
- C++学习笔记2.2 : 容器和算法之关联容器
- (第二部分)容器和算法——顺序容器
- 【C++ Primer 学习笔记】: 容器和算法之【顺序容器】
- 【C++ Primer 学习笔记】: 容器和算法之【关联容器】
- C++ 学习笔记 2.1 : 容器和算法(顺序容器、关联容器、泛型算法)
- C++ Coding Standards:STL:容器和算法
- STL容器和算法的函数表
- Switch语句
- 关于StartCoroutine的简单线程使用
- NppExe插件使用
- 基本语言
- *LeetCode-Peeking Iterator
- 容器和算法
- 类和数据抽象
- 面向对象编程与泛型编程
- 高级主题
- VC 使用combox
- svn check in ,check out, import, export
- cocos2dx and c++ 的小坑
- 常用DIV+CSS命名大全集合
- Xcode出现may cause a leak的解决