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

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++的向量和迭代器的使用:

#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;
}

运行结果为:

Hello
Jessica
Little
Seven
xiuxiu


2
3
7
Please Enter or Retuen to continue.

C++入门(18):模板

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值