您的位置:首页 > 编程语言 > C语言/C++

C++ Primer学习笔记(3)——神奇的容器vector及其迭代器iterator

2015-07-03 10:22 531 查看
除了简单的内置数据类型int ,char, float, double , bool等,C++标准库定义了几种更高级的抽象数据类型,包括string 和vector 类型。string提供了变长的字符串,在上一篇博客中有写到,而vector类型则可用于管理同一类型的对象,是一个集合。

迭代器实现了对存储于容器中对象的间接访问,可用于访问和遍历string和vector类型的元素。

1.vector介绍

vector对象的定义和初始化

-





2.用迭代器iterator操作vector

所有的标准库容器都定义可自己的迭代器,用它来对容器进行操作相当方便简洁。

其定义如下:

vector<int>::iterator  iter;
//iter就是由vector<int>定义的iterator类型的迭代器


可以这样赋值:

vector<int>::iterator  iter = v.begin();      //iter指向v对象的第一个元素




#include <iostream>
#include <vector>
using namespace std;

int main(int argc, const char * argv[]) {
// insert code here...
vector<int> ivec;
int value;
// 输入数据到vector中
cout << "请输入数据:" << endl;
while (cin>>value) {
ivec.push_back(value);
}
//判断是否成功输入了数据
if(ivec.size()==0){
cout << "没有输入数据?!" <<endl;
return -1;
}

//    //开始计算相邻数据的和
//    cout << "相邻两个数的和依次为:" << endl;
//    for (vector<int>::size_type ix = 0; ix < ivec.size()-1; ix=ix+2) {
//        cout << ivec[ix] + ivec[ix+1]<< '\t';
//        if((ix+1)%6 == 0)
//            cout << endl;
//    }
//
//    //判断最后一个数是否计算
//    if (ivec.size() % 2 !=0)
//        cout << endl << "最后一个数据没有求和,其值为"<<ivec[ivec.size()-1]<<endl;

//将vector中所有元素置为原来的2倍
cout << "变成2倍之后为:" <<endl;
for (vector<int>::iterator iv = ivec.begin();iv!=ivec.end(); iv++) {
*iv = 2*(*iv);
cout<< *iv << " ";
}

return 0;
}


运行结果:

请输入数据:
12 3 87 30 58 39
i
变成2倍之后为:
24 6 174 60 116 78


PS : 运行结果中第2行出现的i是我输入的,为了结束输入流的。因为我用的时mac 的Xcode,跟VS不一样的是,cin输入后按回车不能结束输入流,还未找到快捷方式,只好通过输入非法字符来结束了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: