C++的vector使用

标签(空格分隔): C++


标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象,因为vector容纳着其他的对象,所以也称之为容器

要使用vector需要先包含对应的头文件:

#include <vector>

vector也是一个类模板,所以要声明vector对象时和其他的模板一样:

vector<int> iVec;               // iVec保存int类型的对象
vecotr<vector<string>> sVec; // sVec保存vector对象

定义和初始化vector对象

vector<T> vec;                      // vec是一个空的vector,他能接受的类型为T,执行默认初始化
vector<T> vec2(vec); // vec2中包含vec所有元素的副本
vector<T> vec2 = vec; // 等价于vec2(vec);
vector<T> vec(n, val); // vec包含了n个重复的元素,每个元素的值都是val
vector<T> vec2(n); // vec2包含n个重复的执行了T的初始化的对象
vector<T> vec{a, b, c}; // vec包含了a, b, c
vector<T> vec = {a, b, c}; // 等价于vec{a, b, c}

这里要注意vec(n)vec{n}的区别:

vector<int> vec(10);                // vec有10个元素,每个值都是0
vecotr<int> vec{10}; // vec有1个元素,该元素的值是10

向vector对象中添加元素

push_back()负责把一个值当成vector对象的尾元素压倒对象的最后。例如:

vector<int> vec;
for (int i = 0; i != 100; i++) {
vec.push_back(i);
} // 循环结束后vec中100个元素,值从0到99

然而在通过循环向vector中添加元素的时候,最好不要使用for...in...循环,因为添加使得vec.end()失效,使用for...in...循环不能正常工作。

访问vector中的元素

既然vector是一个集合容器,那我们就可以通过便利的方式去一个一个的访问元素:

vector<int> vec{1, 2, 3, 4, 5, 6};
for (auto &i:vect) {
i *= i;
} // 将vec中的每个元素平方
int sum = 0;
for (auto i:vec) {
sum += i;
} // 计算vec元素之和

当然也可以使用下标去访问对象:

for (decltype(v.size()) i = 0, size = v.size(); i != size; i++) {
v.push_back(v[i]);
} // 通过循环把vec的元素拷贝一份到原来的元素后面。

其他vector操作

除了添加元素用的push_back()之外,vector还提供了几种其他操作,大多都和string的相关操作类似。

vec.empty();
vec.size();
vec.push_back(t);
vec[n];
vec1 = vec2;
vec = {a, b, c};
vec1 == vec2; // vec1和vec2相等当且仅当他们的元素数量相同且对应位置的元素都相同
vec1 != | < | <= | > | >= vec2;

C++的vector对象的更多相关文章

  1. 用vector容器代替数组 ——使用数组初始化vector对象

    在C++中,我们不能用数组直接初始化另一数组,而只能创建新的数组,然后显式的把原数组的元素逐个复制给新的数组. 按照C语言中的做法: const size_t arry_size=6; int int ...

  2. 整型数组与vector对象之间的相互初始化

    #include<iostream> #include<vector> #include<string> using namespace std; int main ...

  3. 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化

    1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...

  4. vector 对象中存放指针类型数据

    <<C++ Primer>> 第四版Exercise Section 5.6 的5.1.6 有一道题是这样的:编写程序定义一个vector对象,其每个元素都是指向string类 ...

  5. 002.比较vector对象是否相等

    1.使用vector模板 //编写一段程序,比较vector对象是否相等 //注:该例类似于一个[彩票游戏] #include <iostream> #include <ctime& ...

  6. vector对象

    vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型,例如vector<int> 定义和初始化vector对象: vector<T> v1    ...

  7. 给vector对象添加元素的方法

    #include<iostream> #include<vector> using namespace std; int main() { //初始化10个元素,每个值都为0 ...

  8. c++ vector对象

    下面随笔讲解c++ vector对象. vector对象 为什么需要vector? 封装任何类型的动态数组,自动创建和删除. 数组下标越界检查. 封装的如ArrayOfPoints也提供了类似功能,但 ...

  9. DLL中传递STL参数,vector对象作为dll参数传递等问题(转)

    STL跨平台调用会出现很多异常,你可以试试. STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下 ...

随机推荐

  1. Java中,调试按钮的作用

    调试按钮的主要作用,找错 首先在我们需要找错位置的左边(数字前边)鼠标右键,点击切换断点 点击调试: 找到单步跳入按钮,即可实现步骤的单独运行,方便查找错误的原因, 查找结束记得将断点取消

  2. php实现设计模式之 中介者模式

    <?php /* * 中介者模式:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用从而使其耦合松散,而且可以独立地改变它们之间的交互 */ /* * 以一个同学qq群为例说明, ...

  3. 从零开始学 Java - CentOS 下安装 Nginx

    早上下起了暴雨 闹钟还未响起就听到雨滴哗啦啦击打窗户的声音,被吵醒了.起床上班,在楼下的十字路口,暴雨大到完全看不清对面,两个穿着雨衣的交警站在路口中间指挥着过往的车辆,大家都慌慌张张.急急忙忙的打着 ...

  4. 从头开始搭建一个dubbo+zookeeper平台

    本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后 ...

  5. C#中HashTable的用法

    一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中 ...

  6. Javascript 创建对象方法的总结

    最近看了一下<Javascript高级程序设计(第三版)>,这本书很多人都推荐,我也再次郑重推荐一下.看过之后总得总结一下吧,于是我选了这么一个主题分享给大家. 使用Javascript创 ...

  7. C#中==、Equals、ReferenceEquals的区别

    原文链接:http://www.studyofnet.com/news/1188.html 本文导读: C#中Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不 ...

  8. SharePoint 2013 入门教程之创建及修改母版页

    在SharePoint 2013中,微软提供了根据HTML页面转换Master页的方法,并支持单项同步,但是这样的更新,并不完善,会使一些功能造成丢失,所以,了解Master结构的人,尽量直接去修改M ...

  9. 配置 Oracle 11g侦听器来使用SQL操作ST_Geometry(DLL路径问题)

    注:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#/na/00qn0000001p000000/ (ArcGIS 帮助库) 1 ...

  10. 用UILocalNotification实现一个闹钟(Swift)

    之前项目需求要实现一个闹钟,github上找了半天发现都是很旧的代码了,所以就准备自己写一个,刚好最近在学习Swift,就用Swift写了一个demo放在这里:https://github.com/P ...