关于标准库vector的使用

问题描述

关于标准库vector的使用

在标准库容器vector中,这样是正确的:
vectorvc;
vector::iterator iter;
iter=vc.begin();
iter++;//此时正确
但是下面这样是错误的:
vectorvc;
vc.begin()++//此时错误

为什么不能直接vc.begin()++呢?

解决方案

vc.begin()++被编译成
vc.begin() = vc.begin() + 1;
或者说
vector::iterator iter;
iter = vc.begin();
iter = vc.begin() + 1;
那么事实上vc.begin()被调用了两次。

解决方案二:

这里iterator的++是重载操作符,不是一般的变量的自增量。类似下面这样,

const_noconst_iterator operator++(int){
// Use operator++()
const const_noconst_iterator old(*this);
++(*this);
return old;
}

解决方案三:

std::vectorcharvector;
charvector.push_back('T');
charvector.push_back('H');
charvector.push_back('E');
charvector.push_back('R');
charvector.push_back('E');
charvector.push_back(' ');
charvector.push_back('H');
charvector.push_back('I');
charvector.push_back(' ');

for_each(charvector.begin(), charvector.end(), show_valch);

rotate(++charvector.begin(), charvector.begin() + 6, charvector.end());

rotate(charvector.begin()++, charvector.begin() + 6, charvector.end());

正确

时间: 2024-09-14 12:27:54

关于标准库vector的使用的相关文章

把《c++ primer》读薄(3-2 标准库vector容器+迭代器初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 标准库vector类型初探,同一种类型的对象的集合(类似数组),是一个类模版而不是数据类型,学名容器,负责管理 和 存储的元素 相关的内存,因为vetcor是类模版,对应多个不同类型,比如int,string,或者自己定义的数据类型等. 程序开头应如下声明 #include <iostream> #include <vector> #include <string> using std::strin

《C++编程剖析:问题、方案和设计准则》——第一章泛型编程与C++标准库1.1:vector的使用

第一章泛型编程与C++标准库 C++编程剖析:问题.方案和设计准则C++最强大的特性之一就是对泛型编程的支持.C++标准库的高度灵活性就是明证,尤其是标准库中的容器.迭代器以及算法部分(最初也称为STL). 与我的另一本书More Exceptional C++ [Sutter02]一样,本书的开头几条也是介绍STL中一些我们平常熟悉的部件,如vector和string,另外也介绍了一些不那么常见的设施.例如,在使用最基本的容器vector时如何避免常见的陷阱?如何在C++中进行常见的C风格字符

标准库类型vector

标准库类型vector表示对象的集合,其中所有对象的类型都相同.集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector"容纳着"其他对象,所以它被称为容器. 要想使用vector,必须包含适当的头文件.#include<vector> C++语言既有类模板,也有函数模板 ,其中vector是一个类模板. 模板本身不是类或函数,相反可以将模板看作为编译器生成类或者函数编写的一份说明.编译器根据模板创建类或函数的过程成为实例化,当使用模板时,需要指出编译器应

为C++标准库容器写自己的内存分配程序

根据sgi 的STL源码的二级分配算法改写的内存池分配程序,只要稍微修改就可以实现共享内存方式管理,使用C++标准库容器中的map,set,multimap,multiset测试通过,vector测试通不过,原因是在内存回收的时候考虑的比较简单,vector每次分配内存个数不固定,回收也不固定,这样的话,程序还需要继续完善. 内存池管理程序源码如下: #ifndef MY_ALLOCATOR_H_#define MY_ALLOCATOR_H_#include "stdafx.h"#in

C++标准库 bitset

有些程序要处理二进制位的有序集,每个位可能包含 0(关)1(开)值.位是用来保存一组项或条件 的 yes/no 信息(有时也称标志)的简洁方法.标准库提供的 bitset 类简化了位集的处理.要使用 bitset 类就必须包含相关的头文件.在本书提供的例子中,假设都使用 std::bitset 的using声明: #include <bitset> using std::bitset; bitset 对象的定义和初始化 下表列出了 bitset 的构造函数.类似于 vector,bitset

源代码-.netframework有类似于c++的标准库么

问题描述 .netframework有类似于c++的标准库么 如题,例如c++有vector.什么什么的,不知道netframework里有什么对应的么? 另外我听说netframework在gib上开源了,如果有这个标准库, 那他这个源代码有么? 嗯我听说c#才是net的主要语言,而c#里只有命名空间的概念不用include的了. 那这些标准库的源代码岂不是有点乱?都在一起么? 解决方案 有的,但是这个和标准没关系. C++的vector对应.NET的List 解决方案二: 开源和标准没有任何

把《c++ primer》读薄(3-1 标准库string类型初探)

督促读书,总结精华,提炼笔记,抛砖引玉,有不合适的地方,欢迎留言指正. 问题1:养成一个好习惯,在头文件中只定义确实需要的东西 using namespace std; //建议需要什么再using声明什么,最好不使用这个偷懒的写法 问题2:C++定义了一个内容丰富的抽象数据类型的标准库,最重要的两个标准库类型是string和vector 因为他们是c++基本内置类型基础上改进而来,故重要!前者支持变长字符串,后者可以保存一组指定类型的对象. 问题3:什么时候会调用默认的构造函数? 默认构造函数

C++11时代的标准库快餐教程(2) - STL概览

STL概览 在进入STL的世界之前,我们先对其中的主要组件做一个鸟瞰: 先来一张层次图: 如果觉得层次图看不清的话,我们把它重新绘成思维导图吧: 从图中我们可以看到: STL的核心只有三个大组件: 容器 迭代器 算法 当然,这么大的一个包罗万象的C++标准库,还是有很多其他的组件,比如智能指针.字符串.正则表达式.流式I/O.并发处理等不是跟容器相关的.但是做为核心的容器库,就只有这三大组件. 容器的种类其实蛮少的,大体上分为基本容器和特殊容器两大类. 基本容器按照无序,有序,排序分成了三大类:

C++著名类库和C++标准库介绍

C++著名类库 1.C++各大有名库的介绍--C++标准库 2.C++各大有名库的介绍--准标准库Boost 3.C++各大有名库的介绍--GUI 4.C++各大有名库的介绍--网络通信 5.C++各大有名库的介绍--XML 6.C++各大有名库的介绍--科学计算 7.C++各大有名库的介绍--游戏开发 8.C++各大有名库的介绍--线程 9.C++各大有名库的介绍--序列化 10.C++各大有名库的介绍--字符串 11.C++各大有名库的介绍--综合 12.C++各大有名库的介绍--其他库 1