C++的vector对象
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对象的更多相关文章
- 用vector容器代替数组 ——使用数组初始化vector对象
在C++中,我们不能用数组直接初始化另一数组,而只能创建新的数组,然后显式的把原数组的元素逐个复制给新的数组. 按照C语言中的做法: const size_t arry_size=6; int int ...
- 整型数组与vector对象之间的相互初始化
#include<iostream> #include<vector> #include<string> using namespace std; int main ...
- 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化
1 改变容器的大小 我们可以使用resize来增加或缩小容器,与往常一样,array不支持resize.如果当前大小大于所要求的大小,容器后面的元素会被删除:如果当前大小小于新大小,会将新元素添加到容 ...
- vector 对象中存放指针类型数据
<<C++ Primer>> 第四版Exercise Section 5.6 的5.1.6 有一道题是这样的:编写程序定义一个vector对象,其每个元素都是指向string类 ...
- 002.比较vector对象是否相等
1.使用vector模板 //编写一段程序,比较vector对象是否相等 //注:该例类似于一个[彩票游戏] #include <iostream> #include <ctime& ...
- vector对象
vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型,例如vector<int> 定义和初始化vector对象: vector<T> v1 ...
- 给vector对象添加元素的方法
#include<iostream> #include<vector> using namespace std; int main() { //初始化10个元素,每个值都为0 ...
- c++ vector对象
下面随笔讲解c++ vector对象. vector对象 为什么需要vector? 封装任何类型的动态数组,自动创建和删除. 数组下标越界检查. 封装的如ArrayOfPoints也提供了类似功能,但 ...
- DLL中传递STL参数,vector对象作为dll参数传递等问题(转)
STL跨平台调用会出现很多异常,你可以试试. STL使用模板生成,当我们使用模板的时候,每一个EXE,和DLL都在编译器产生了自己的代码,导致模板所使用的静态成员不同步,所以出现数据传递的各种问题,下 ...
随机推荐
- php 实现设计模式之 建造者模式
<?php /** * 建造者模式 * ------------- * 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. * 类型:创建类模式 * 四个要素: * ...
- java web学习总结(十四) -------------------JSP原理
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
- 自定义JsonResult解决 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用
接上篇的问题,给出我自己的解决方案. 同时推荐要学习MVC的可以参考下<ASP.NET MVC4 框架揭秘>. 首先,要自定义JSonResult,就要明白MVC中 JsonResult的 ...
- Code First :使用Entity. Framework编程(6) ----转发 收藏
Chapter6 Controlling Database Location,Creation Process, and Seed Data 第6章 控制数据库位置,创建过程和种子数据 In prev ...
- 美女jquery图片播放器插件
相册在线查看http://keleyi.com/keleyi/phtml/image/6.htm 可全屏,可拖动,可自动播放的jquery图片展示插件 使用说明:1.引用css文件:<link ...
- CSS学习
标签选择器,标签名{},作用于所有此标签. 类选择器, .class{},在标签内定义class="",属图形结构. ID选择器,#ID{}, 在标签内定义id="&qu ...
- PKCS#1规范阅读笔记2--------公私钥ASN.1结构
PKCS#1种介绍了哈希算法的OID等的ASN.1结构,因为使用ASN.1的解码工具(比如:ASN1View)时,会自动显示出各OID的含义,所以这里就不说明了.下面就只简单摘抄一下RSA公私钥的AS ...
- Android屏幕适配
安卓分辨率的相关知识 http://leoray.leanote.com/post/android-resolution Android内存占用公式 系统内存 = 像素宽 * 像素高 * 像素所占用的 ...
- java设计模式 策略模式Strategy
本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...
- 从tabBarController的一个item上的控制器跳转到另一个item上的控制器
先从习惯性的tabBarController开始,很多应用的外框都是用这个开始的,而从tabBarController的一个item上的控制器跳转到另一个上的,往往都是直接通过点击tabBar上的不同 ...