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.