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

C++入门(19):向量与迭代器

2016-01-18 09:51 405 查看

C++入门(19):向量与迭代器

容器

容器一般通过模板来实现,即容器一般为模板的实例化。

向量容器(头文件
#include <vector>
)

如果想创建特定类型的向量,需要使用的语法为:
std::vector<type> vectorName;
比如,
std::vector<std::string> names;
即定义了一个字符串向量。

1) 向量可以动态地随着你往它里面添加元素而无限增大——只要还有内存可用。我们可以随时用向量的 size() 方法查询某给定向量的当前长度(当前包含的元素个数):
names.size();


2) 定义了一个向量之后,就可以用 push_back() 方法往它里面添加东西了:
names.push_back("xiuxiu")


3) 可以用访问数组元素的语法来访问某给定向量里的各个元素:names[1];

4) 因为向量的长度仅受限于计算机上的可用内存,所以它非常适合用来读取数量未知的用户输入。

迭代器( iterator )

迭代器是从容器那里“申请” 来的,因为只有容器才知道哪一种迭代器最适合它的内部表示形式;

迭代器的真正价值体现在它们可以和所有的容器配合使用,而使用迭代器去访问容器元素的算法可以和任何一种容器配合使用。

如果想把C++标准库里的算法用于自己的类,需要实现以下几种操作:赋值,
operator=()
方法;“小于”,
operator<()
方法;“等于”比较,
operator==()
方法。

下面通过代码熟悉一下C++的向量和迭代器的使用:

[code]#include <iostream>
#include <string>
#include <vector>
#include <algorithm>                         //算法头文件

int main(int argc, char** argv) {

    std::vector<std::string> names;          //创建一个字符串向量
    names.push_back("xiuxiu") ;
    names.push_back("Hello") ;
    names.push_back("Little") ;
    names.push_back("Seven") ;
    names.push_back("Jessica") ;

/*当向某个算法传递一个取值范围的时候,C++标准库将假设所提供的“尾”迭代器指向该取值范围内最后一个元素的下一个元素*/
    std::sort(names.begin() , names.end() );  //从小到大排序向量里的所有元素

    std::vector<std::string>::iterator iter = names.begin() ;    //从向量申请迭代器
    //通过迭代器对容器里的元素进行遍历
    while(iter != names.end() )               //names.end()返回的迭代器指向容器中最后一个元素的下一个元素(实际上不存在,因为已经超出了容器的边界)
    {
        std::cout << *iter << std::endl;      //通过迭代器访问某个元素的值需要对它解引用
        ++iter;                               //把迭代器移动到下一个元素
    }

    std::cout << std::endl << std::endl;

    std::vector<int> intVector;               //创建一个整形向量
    intVector.push_back(2);
    intVector.push_back(3);
    for( int i = 0; i < intVector.size(); i++)
    {
        std::cout << intVector[i] << std::endl;
    }
    intVector[0]  = 7;                        //把一些元素放到一个向量里以后,就可以用赋值操作符来改变它们的值了
    std::cout << intVector[0] << std::endl;

    std::cout << "Please Enter or Retuen to continue.";
    std::cin.get();

    return 0;
}


运行结果为:

[code]Hello
Jessica
Little
Seven
xiuxiu

2
3
7
Please Enter or Retuen to continue.


C++入门(18):模板
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: