初识标准库类型vector

vector 是同一种类型的对象的集合,类似于数组,每个对象都有一个对应的整数索引值。

它和 string 对象一样,系统将负责管理与存储元素相关的内存。

我们把 vector称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。

 

使用 vector 之前,必须包含相应的头文件

    #include <vector>

    using std::vector;

vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存 string 对象的 vector,或保存 int 值的 vector,又或是保存自定义的类类型对象(如Sales_items 对象)的 vector

vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型

 

定义和初始化 vector对象

vector<T> v1;//vector 保存类型为 T 对象。默认构造函数 v1 为空。

vector<T> v2(v1);//v2 是 v1 的一个副本。

vector<T> v3(n, i);//v3 包含 n 个值为 i 的元素。

vector<T> v4(n);//v4 含有值初始化的元素的 n 个副本。

vector<T> v5{a,b,c...};//v5包含了初始值个数的元素,每个元素被赋予相应的初始值

 

 

vector 对象的操作

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

v.empty();//如果 v 为空,则返回 true,否则返回 false

v.push_back(t);//在 v 的末尾增加一个值为 t 的元素。

v[n];//返回 v 中位置为 n 的元素。

v1 = v2;//把 v1 的元素替换为 v2 中元素的副本。

v1 == v2;//如果 v1 与 v2 相等,则返回 true

!=, <, <=,>, and >=  保持这些操作符惯有的含义。

 

/*

 * vector 对象的操作

 对象的 size

 *JH 2017-3-13

 */

 

#include <iostream>

#include <vector>

using namespace std;

 

int main(void)

{

    vector<int> ivec(10,0); //创建对象初始化值为0,共有10个元素

    cout<<ivec.size()<<endl;

    return 0;

}

 

/*

 * vector 对象的操作

 向 vector 添加元素

 * push_back 操作接受一个元素值,并将它作为一个新的元素添加到 vector对象的后面,

 也就是“插入(push)”到 vector 对象的“后面(back)”:*

 *JH 2017-3-13

 */

 

#include <iostream>

#include <vector>

#include <string>

using namespace std;

 

int main(void) 

{

    string word;

    vector<string> text;

 

    while (cin >> word)

        text.push_back(word);

 

    return 0;

}

 

/*

 * vector 对象的操作

 * vector 的下标操作

 * ector 的下标操作符接受一个值,并返回 vector 中该对应位置的元素。

 * vector 元素的位置从 0 开始

 *JH 2017-3-13

 */

 

#include <iostream>

#include <vector>

#include <string>

using namespace std;

 

int main(void) 

{

    vector<int> ivec;

    for (int i = 0; i < 10; i++)

        ivec.push_back(i);

    for (vector<int>::size_type x = 0; x != ivec.size(); x++)

        cout << ivec[x] << "\t";

    cout << endl;

 

    return 0;

}

 

 

迭代器简介

除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator)。迭代器是一种检查容器内元素并遍历元素的数据类型

所有的标准库容器都可以使用迭代器。

迭代器(iterator) 类型

每种容器类型都定义了自己的迭代器类型,如 vector:

vector<int>::iterator iter1;//iter1能读写vector<int>的元素

string::iterator iter2;//iter2能读写string对象中的字符

vector<int>::const_iterator iter3;//iter3只能读元素,不能写元素

string::const_iterator iter4;//iter4只能读字符,不能写字符

 

begin和end运算符

begin和end返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iterator;

vector<int> v;

const vector<int> cv;

auto iter1 = v.begin();

auto iter2 = v.end();


/*

 迭代器应用的程序示例

 * JH 2017-3-13

 */

 

#include <iostream>

#include <vector>

#include <string>

using namespace std;

 

int main(void) 

{

    vector<int> ivec;

    for (int i = 0; i < 10; i++)

        ivec.push_back(i);

    vector<int>::iterator iter; //定义一个迭代器名为 iter 的变量

    //vector::const_iterator iter; //对 const_iterator 类型解引用时,则可以得到一个指向 const 对象的引用

    for (iter = ivec.begin(); iter != ivec.end(); iter++)

        cout << *iter << "\t";

    cout << endl;

 

    return 0;

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值