C++学习之容器的摸索
初学容器,容易犯错的地方
1.vector,list和deque都是顺序容器。其中vector和deque都可以通过下标访问,而list不能
2. 容器的begin和end操作
c.begin()返回一个迭代器,它指向容器c的第一个元素
c.end()返回一个迭代器,它指向容器c的最后一个元素的
c.rbegin()返回一个逆序迭代器,它指向容器c的最后一个元素
c.rend()返回一个逆序迭代器,它指向容器c的第一个元素的前面一个元素
注意以上操作的返回的迭代器类型,前两个是iterator,后面一个是reverse_iterator。乱了顺序是不行的
请看下面一段代码:
#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <string>
using namespace std; int main()
{
int i = ;
char *words[] = {"stately","plump","buck","mulligan"};
size_t words_size = sizeof(words) / sizeof(char *);
cout << "数组大小:" << words_size << endl;
vector<string> words2(words,words+words_size);
cout << "我采用迭代器的方式逆序访问容器:" << endl;
for(vector<string>::reverse_iterator it=words2.rbegin();it!=words2.rend( );++it)
{
cout << "list容器内内容为:"<< *it << endl;
}
cout << "现在采用容器大小的方式访问容器:" << endl;
for(i = ;i < words2.size();++i)
{
cout << "list容器内内容为:" << words2[i] << endl;
}
return ;
}
上面的代码如果将vector换成deque是没问题的,但是如果换成list程序就会出错,这就验证了1.
如果将reverse_iterator换成iterator,则程序也会出错,那时因为没注意到2.
3.vector和deque类型迭代器支持的操作
iter + n 在迭代器上加(减)整数值n,将产生指向容器前面(后面)第n个元素的迭代器
iter - n
iter1 += iter2 这是迭代器加减法的符合预算:将iter1加上或减去iter2的预案算结果赋给iter
iter1 -= iter2
iter1 - iter2 连个迭代器的减法,其运算结果加上右边的迭代器既得左边的迭代器,这两个迭代器必须指向同一个容器中的元素或超出容器末端的下一位置。只适用于vector和deque容器
>,<,>=,<= 迭代器的关系操作符。当一个迭代器指向的元素在容器中位于另一个迭代器指向的元素之前,则前一个迭代器小于后一个迭代器。关系操作符的两个迭代器必须指向同意容器的元素或超出容器末端的下一个位置。只适用于vector和deque容器
C++学习之容器的摸索的更多相关文章
- Spring.NET依赖注入框架学习--实例化容器常用方法
Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...
- 5.docker学习之容器
容器创建 我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器.同样,如果我们想要使用容器,那么我们必须首先需要创建容器.而 ...
- c++学习之容器细枝末节(2)
从昨天到现在,还依然停留在容器的学习上,现在写例程代码顺手多了,看来写代码还是要多多练习才能有感觉. 经过一天的学习,有一下几点知识点让我觉得很有意义: (1)删除容器中的元素的时候,pop_fron ...
- c++学习之容器细枝末节(1)
对照着c++primier 开始学习第九章容器,把课后习题当做练习,虽然是看过书上的讲解,但是做题编程的时候,一些需要注意的地方还是难免有遗漏. 一下是几点印象比较深刻的总结: (1)前几章只学了ve ...
- ###STL学习--关联容器
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...
- 创建ApplicationContext与BeanFactory时的区别-Spring源码学习之容器的基本实现
传送门 可以加载XML两种方法 使用 BeanFactory 加载 XML BeanFactory bf = new XmlBeanFactory(new ClassPathResource(&quo ...
- 侯捷STL学习(十)--容器hashtable探索(unordered set/map)
layout: post title: 侯捷STL学习(十) date: 2017-07-23 tag: 侯捷STL --- 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 ...
- spring源码学习之容器的基本实现
最近想拿出一部分时间来学习一下spring的源码,还特意买了一本书结合来看,当然主要是学习并跟着作者的思路来踏上学习spring的源码的道路,特意在此记录一下,<spring源码深度解析> ...
- laravel学习:容器绑定与解析
1.在服务容器中注册类(bind) $this->app->bind('sender','MailSender');//$this->app成为服务容器. 2.从服务容器生成类( ...
随机推荐
- 在Eclipse中显示空格(space)和制表符(tab)
显示空格(space)和制表符(tab)设置: Window->Preferences->General->Editors->Text Editors->Show whi ...
- 11.3 morning
noip模拟题day1 总览(Overview) 题目名称 取模 等比数列 回文串 程序名 mod sequence palindromes 输入文件名 mod.in sequence.in pa ...
- python 学习笔记(二)两种方式实现第一个python程序
在交互模式下: 如果要让Python打印出指定的文字,可以用print语句,然后把希望打印的文字用单引号或者双引号括起来,但不能混用单引号和双引号: >>> print 'hello ...
- CakePHP之Model
模型 模型在应用程序中是作为业务层而存在的(怎么感觉是数据层......).这就意味着,模型应当负责管理几乎所有涉及数据的事情,其合法性,以及你的业务领域中数据在工作流程中的演化和互动 . 通常模型类 ...
- C++ hello world
日文版本的vs 2008 , 在 < 新建 里面先创建一个项目 然后点击项目去创建一个C++的主启动文件 选择创建的文件类型 然后在文件里面写入代码 #include<iostream&g ...
- Sql2008中使用DataTable作为存储过程的参数
使用DataTable作为存储过程的参数 最近工作中写了几个存储过 程,需要向存储过程中传递字符串,因为SQL Server 2000中没有内置类似于 split 的函数,只好自己处理,将前台数据 ...
- 实现Android K的伪沉浸式
在Android 5.0之后引入了MD风格,从而状态栏沉浸也成为了一种设计习惯.而停留在之Android L之前的Android系统则不能直接实现沉浸式,这里就介绍一下如何实现Android K系列的 ...
- SGU 112.a^b - b^a
题意: 如标题. 方法: 简单高精度... 代码(继续JAVA 水过) import java.util.*; import java.math.*; public class Solution { ...
- 『重构--改善既有代码的设计』读书笔记----Remove Middle Man
如果你发现某个类做了过多的简单委托动作,你就可以考虑是否可以让客户直接去调用受托类.在Hide Delegate中,我们介绍了封装受托对象的好处,但好处归好处也存在代价,就是当你每次需要在受托对象中增 ...
- 解决xp共享的批处理文件
在空白地方点右键选择新建一个文本文档,将默认的“新建 文本文档.txt”文件名改名为以下红色加粗字体内容,再复制红色内容以下的黑字部分到改名后的文档.其他文件生成的方法相同.完成后根据需要双击CMD扩 ...