初学容器,容易犯错的地方

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++学习之容器的摸索的更多相关文章

  1. Spring.NET依赖注入框架学习--实例化容器常用方法

    Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...

  2. 5.docker学习之容器

    容器创建 我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器.同样,如果我们想要使用容器,那么我们必须首先需要创建容器.而 ...

  3. c++学习之容器细枝末节(2)

    从昨天到现在,还依然停留在容器的学习上,现在写例程代码顺手多了,看来写代码还是要多多练习才能有感觉. 经过一天的学习,有一下几点知识点让我觉得很有意义: (1)删除容器中的元素的时候,pop_fron ...

  4. c++学习之容器细枝末节(1)

    对照着c++primier 开始学习第九章容器,把课后习题当做练习,虽然是看过书上的讲解,但是做题编程的时候,一些需要注意的地方还是难免有遗漏. 一下是几点印象比较深刻的总结: (1)前几章只学了ve ...

  5. ###STL学习--关联容器

    点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...

  6. 创建ApplicationContext与BeanFactory时的区别-Spring源码学习之容器的基本实现

    传送门 可以加载XML两种方法 使用 BeanFactory 加载 XML BeanFactory bf = new XmlBeanFactory(new ClassPathResource(&quo ...

  7. 侯捷STL学习(十)--容器hashtable探索(unordered set/map)

    layout: post title: 侯捷STL学习(十) date: 2017-07-23 tag: 侯捷STL --- 第二十三节 容器hashtable探索 hashtable冲突(碰撞)处理 ...

  8. spring源码学习之容器的基本实现

    最近想拿出一部分时间来学习一下spring的源码,还特意买了一本书结合来看,当然主要是学习并跟着作者的思路来踏上学习spring的源码的道路,特意在此记录一下,<spring源码深度解析> ...

  9. laravel学习:容器绑定与解析

    1.在服务容器中注册类(bind) $this->app->bind('sender','MailSender');//$this->app成为服务容器.   2.从服务容器生成类( ...

随机推荐

  1. [转] CSS transition

    https://css-tricks.com/almanac/properties/t/transition/ The transition property is a shorthand prope ...

  2. [转] Spring Boot and React hot loader

    When I develop web applications, I love using React. I'm also a Spring and groovy addict. Those two ...

  3. Oracle修改被占用的临时表结构

    这两天在修改临时表的类型时,提示”attempt to create,alter or drop an index on temporary table already in use“的错误,由于临时 ...

  4. PhoneGap 在eclipse上开发Android程序

    本文将记录在Eclipes上开发Android App,在使用的方法是Hybrid App(混合模式移动应用), 由于本人的工作需要,将要开发在车间使用的数据录入程序,但是其中有非常多的逻辑验证和判断 ...

  5. Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包

    官方文档:https://developer.Android.com/tools/publishing/app-signing.html 1. 默认为debug mode,使用的签名文件在: $HOM ...

  6. CSS3 颜色值HSL表示方式&简单实例

    HSL色彩模式:就是色调(Hue).饱和度(Saturation).亮度(Lightness)三个颜色通道的改变以及它们相互之间的叠加来获得各种颜色,色调(Hue)色调最大值360,饱和度和亮度有百分 ...

  7. HashMap深度解析(一)

    本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/16843543 HashMap可以说是Java中最常用的集合类框架之一,是 ...

  8. 使用EasyUI设计.net项目的菜单数实例

    最近领导说我们之前的项目采用的菜单树模型过时了,现在采用EasyUI来设计了,于是学习了第三方资源库easyUI,发觉果然是好东西,这里给大家分享下. 首先到官网下载源文件,这个是开源的,都可以下再, ...

  9. PrintWriter 和 BufferedWriter 写入文件.

    Ref: should I use PrintWriter to wrap BufferedWriter? The main reason for using PrintWriter is the w ...

  10. objectiv-c所有对象之间的交互是如何实现的?

    在对象间交互中每个对象承担不同的角色,总的来说就是“数据发送者”和“数据接收者”两个角色.可以通过objective-c中给我们提供的手段来实现两者间的通讯.比如: “通知中心”NSNotificat ...