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

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. Android绘制流程

    一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL.Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. ...

  2. 面试时,问哪些问题能试出一个Android应用开发者真正的水平?

    一般面试时间短则30分钟,多则1个小时,这么点时间要全面考察一个人难度很大,需要一些技巧,这里我不局限于回答题主的问题,而是分享一下我个人关于如何做好Android技术面试的一些经验: 面试前的准备 ...

  3. 【Android】面试宝典

    Android面试 1. 内容介绍................................................................................... ...

  4. 虚拟机如何访问tomcat

    首先需要把tomcat和jdk整到虚拟机里,然后再在虚拟机里安装tomcat和jdk. 一.怎样把tomcat和jdk整到虚拟机里? 1,需要“ha_Serv-U6406 ftp服务器”的帮助,所以先 ...

  5. HTML5 WebAudioAPI(三)--绘制频谱图

    HTML <style> #canvas { background: black; } </style> <div class="container" ...

  6. SGU 176.Flow construction (有上下界的最大流)

    时间限制:0.5s 空间限制:4M 题意: 有一个由管道组成的网络,有n个节点(n不大于100),1号节点可以制造原料,最后汇集到n号节点.原料通过管道运输.其中有一些节点有管道连接,这些管道都有着最 ...

  7. Codeforces 527E Data Center Drama(欧拉回路)

    题意: 给定一个无向图连通图,把这个的无向边变成有向边,并添加最少的有向边使这个图每个结点的出度为偶数. Solution: 题目很长,并且很多条件说的不太直接,确实不太好懂. 首先先看得到的无向图, ...

  8. 导入Android工程源码出现乱码问题的解决方法

    可以尝试着从以下三个方法进行调试,一般情况下会完美解决的: 1.windows->Preferences->General->Content Types->Text->J ...

  9. extend简单用法

    eg:var obj1=[{a:1,b:2},{a:2,b:3}] var obj2=[{c:3,d:2},{c:4,d:3}] var resultArray=[]; for (var i = 0; ...

  10. 批处理文件安装与卸载Windows服务

    //安装Windows服务 将RECPost.exe和RECPostService替换成自己的项目名称和服务名称,并将文件保存成bat格式.其中%cd%是获取相对路径 @echo off set fi ...