STL Vector学习笔记

STL是Standard Template Library的简称,主要包括三部分:algorithm,container和iterator。


##容器向量Vector##

Vector属于STL中的container,是一个container向量。

在《C++ Primier》中是这么定义的:

标准库类型Vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。它是一个类模板。

在g++环境下进行实验:

#include <iostream>
#include <vector>
using namespace std;
int main(){
    vector<int>vi;
    int a;
    while(true)
    {
    cout<<"输入一个整数,按0停止输入:";
    cin>>a;
    if(a==0)
    break;
    vi.push_back(a);  
    vector<int>::iterator iter;
    for(iter=vi.begin();iter!=vi.end();++iter)
    cout<<*iter;     
    }
    return 0;
    }

测试结果:

输入8,屏幕打印8

输入0,屏幕打印80

输入2,屏幕打印802

输入3,屏幕打印8023

这个程序会在每次输入后,输出从开始到当前的所有输入。这些值全部是存在vi这个向量数组中,而输出是用一个迭代器指针进行输出(可以用迭代器或者下标运算符访问来进行输出。cout不能直接输出一个vector)。这里的 vector<int>vi声明vi存储int类型。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
    string str="tuzhi";
    vector<string> vecstr;
    vecstr.push_back(str);
    vector<string>::iterator iter= vecstr.begin();
    //定义一个可以迭代string型vector的迭代器iter,它指向vecstr的首位
    cout<<*iter<<endl;
    return 0;
}

这个程序打印出tuzhi,这里的 vector<string>vecstr声明vecstr存储string类型。


##容器的iterator类型## 迭代器这个名词有三个不同的含义:可能是迭代器本身,也可能是指容器定义的迭代器类型,还可能是指某个迭代器对象。

上面两个例子都用到了类似 vector<T>::iterator iter这种东西。它是一个容器定义的迭代器类型。每种容器类型都定义了自己的迭代器类型,如vector:

vector<int>::iterator iter;

这条语句定义了一个名为iter的变量,它的数据类型是由vector定义的iterator类型。每个标准库容器类型都定义了一个名为iterator的成员,这里的iterator与迭代器实际类型的含义相同。

不同的容器类定义了自己的iterator类型,用于访问容器内的元素。换句话说,每个容器定义了一种名为iterator的类型,而这种类型支持(概念上的)迭代器的各种行为。

关于迭代器的更多介绍,可以参见《C++ Primier》Page95~Page101。


##Reference#

[1].http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html

[2].http://www.cplusplus.com/reference/vector/vector/

[3].《C++ Primier》Page95~Page101



Previous     Next
tuzhi /
Published under (CC) BY-NC-SA in categories C&&C++  tagged with