C++标准库类型vector学习笔记

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


要想用vector,必须包含头文件和声明:

#include <vector>
using std::vector;
//或者
using namespace std;

注意:vector是模板,而非类型,使用时必须指定vector生成的类型,例如vector<int>(和模板的定义很相似)


关于定义和初始化:

如何确定是列表初始值还是元素数量:依赖于用的是花括号还是圆括号。

vector<int> v1(10);        //10个元素,每个都是0
vector<int> v2{10};       //1个元素,值是0
vector<int> v3(10,1);     //10个元素,每个都是1
vector<int> v4{10,1};    //2个元素,分别是10,1

常用的vector操作:

v.empty() //如果v不含有任何元素,返回真

v.size() //返回v中元素个数

v.push_back() //向v的尾端添加值

v[n] //返回v中第n个位置的元素,注意下标从0开始,不要越界!!!

v1 == v2 v1 != v2......


vector的empty和size两个成员与string的同名成员功能完全一致:empty检查vector对象是否包含元素然后返回一个布尔值;size返回vector对象中元素个数,返回值的类型是由vector定义的size_type类型。

注意:要使用size_type,需首先指定它是哪种类型定义的。例如vector<int>::size_type 而不是vector::size_type



因为最近接触的项目里很多地方用到vector,所以对size_type需要多加理解。

给出项目里一部分代码:

for (vector<sPedestrian>::size_type iy = 1; iy != tracklet_set[ix].Tracklet.size(); ++iy)
{
tracklet_set[ix].Tracklet[iy].vector_x = tracklet_set[ix].Tracklet[iy].x - tracklet_set[ix].Tracklet[iy-1].x;
tracklet_set[ix].Tracklet[iy].vector_y = tracklet_set[ix].Tracklet[iy].y - tracklet_set[ix].Tracklet[iy-1].y;
//cout<<endl<<tracklet_set[ix].Tracklet[iy].vector_x<<" "<<tracklet_set[ix].Tracklet[iy].vector_y<<endl;
}

当时看到这里我有点懵,平时在for循环里直接定义int iy=1就好了,想想这样写也不会报错。

for ( std::vector<int>::size_type i = 0; i < a.size(); i++ )

for ( int i = 0; i < a.size(); i++ )


后来查了下相关资料,给出下面的解释:

size_type 相当于 unsigned int类型,使用size_type 主要是为了适应不同的平台,int 类型大小会根据不同平台而不同,所以应该是size_type 好。
其实要说肯定是size_type好,但是后面的写法简单明了,只是想把i当做一个计数器,感觉也没有必要用那么复杂的写法。
当然编译器可能给出一个这样的警告:warning C4018: “<”: 有符号/无符号不匹配
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值