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):模板
相关文章推荐
- C/C++ Summary at USC
- Sicily 1920. Divide The Stones
- #枚举和排序 B - ID Codes
- 控制流【重学C之三】
- C++编程(四)--- 代码规范
- 【C语言】实现strcat函数
- 【C语言】实现strcpy函数
- 编程题#6: priority queue练习题(C++程序设计第9周)
- 「C语言」原码反码补码与位运算
- 编程题#5: 热血格斗场(C++程序设计第9周)
- 编程题#4: 字符串操作(C++程序设计第9周)
- C++namespace
- 【C语言】实现memcopy、memmove函数
- [项目]用C++实现的壳(基础版)
- c++11 访问者模式
- 高性能c语言编码
- C++ std::vector元素的内存分配问题
- C++编程对缓冲区的理解
- 【LeetCode-242】Valid Anagram(C++)
- C语言中的三大循环