vector,迭代器,数组
2016-07-04 16:21
232 查看
vector
#include<vector>
using std::vector;
初始化;
常用的操作:
v.empty();
v.size(); 返回的也是配套的size_type类型。
v.push_back(t);在尾端添加一个值为t的元素。注意的是,不能用下标运算添加元素。如果在循环体里有添加vector元素的语句,则不能使用范围for语句。
v[ n];下标运算符。
v1=v2;赋值操作,数组却不能赋值给另外一个数组。
一系列比较运算,注意的是,只用当元素的值可以比较时,vector对象才能被比较。
迭代器
迭代器其实用来代替指针对容器的数据进行操作的一种产物,它避免了对指针的误用带来的错误。它定义在各种容器类里。
比如说
vector<int> vec;
auto it =vec.begin();迭代器,指向vector的第一个元素;
迭代器的类型:
iterator和const_iterator。一个能读写指向的内容,一个只能读。
获取迭代器的方法
auto a=vec.begin(); 获取一个指向容器首的一个迭代器
auto b=vec.end();获取一个指向容器尾的下一个位置的迭代器。
迭代器的运算符
*it
it->mem;
++it;
--it;
==
!=
和指针一样,迭代器可以进行一系列的算数运算;迭代器相减的距离的类型为 difference_type,是带符号类型;
注意的一点:改变vector对象容量的操作,都会使该vector对象的迭代器失效。
数组
基本都是之前学的知识;
要注意的是理解复杂数组的声明
int(*p) [10 ]= &a;//p 是一个指向一个int[10]的指针
int (&p) [10]= b;// p 引用一个int [10];
数组的长度类型为size_t,定义在cstddef头文件中,是个无符号类型。
数组名在很多地方,在编译器看来是一个指针。这里要注意auto和decltype的区别。数组名在auto看来是个指针,但decltype看来却不是。
为了方便的使用数组,c++11定义了标准库函书begin和end;和容器中的两个同名函数功能类似。
#include<itetrator>
int a[ ]={1,2,3};
auto b=std::begin(a);b是指向a[0] 的指针
auto c=std::end(a);c是指向数组尾的下一个位置的指针
使用数组初始化vector对象。但尽量避免使用数组和指针。
使用范围for语句处理多维数组。
for(const auto &row : ia)
for(auto col ; row)
cout<<col<<endl;
这里要注意的是auto。因为用了auto,所以最外层要把row申明为引用。不然row在auto看来就是指针,就出错了。
#include<vector>
using std::vector;
初始化;
常用的操作:
v.empty();
v.size(); 返回的也是配套的size_type类型。
v.push_back(t);在尾端添加一个值为t的元素。注意的是,不能用下标运算添加元素。如果在循环体里有添加vector元素的语句,则不能使用范围for语句。
v[ n];下标运算符。
v1=v2;赋值操作,数组却不能赋值给另外一个数组。
一系列比较运算,注意的是,只用当元素的值可以比较时,vector对象才能被比较。
迭代器
迭代器其实用来代替指针对容器的数据进行操作的一种产物,它避免了对指针的误用带来的错误。它定义在各种容器类里。
比如说
vector<int> vec;
auto it =vec.begin();迭代器,指向vector的第一个元素;
迭代器的类型:
iterator和const_iterator。一个能读写指向的内容,一个只能读。
获取迭代器的方法
auto a=vec.begin(); 获取一个指向容器首的一个迭代器
auto b=vec.end();获取一个指向容器尾的下一个位置的迭代器。
迭代器的运算符
*it
it->mem;
++it;
--it;
==
!=
和指针一样,迭代器可以进行一系列的算数运算;迭代器相减的距离的类型为 difference_type,是带符号类型;
注意的一点:改变vector对象容量的操作,都会使该vector对象的迭代器失效。
数组
基本都是之前学的知识;
要注意的是理解复杂数组的声明
int(*p) [10 ]= &a;//p 是一个指向一个int[10]的指针
int (&p) [10]= b;// p 引用一个int [10];
数组的长度类型为size_t,定义在cstddef头文件中,是个无符号类型。
数组名在很多地方,在编译器看来是一个指针。这里要注意auto和decltype的区别。数组名在auto看来是个指针,但decltype看来却不是。
为了方便的使用数组,c++11定义了标准库函书begin和end;和容器中的两个同名函数功能类似。
#include<itetrator>
int a[ ]={1,2,3};
auto b=std::begin(a);b是指向a[0] 的指针
auto c=std::end(a);c是指向数组尾的下一个位置的指针
使用数组初始化vector对象。但尽量避免使用数组和指针。
使用范围for语句处理多维数组。
for(const auto &row : ia)
for(auto col ; row)
cout<<col<<endl;
这里要注意的是auto。因为用了auto,所以最外层要把row申明为引用。不然row在auto看来就是指针,就出错了。
相关文章推荐
- 225. Implement Stack using Queues
- mongodb 3.2 集群认证及创建用户
- 堆排序
- hdwiki 编码规范
- Jquery 遍历数组之$().each方法与$.each()方法介绍
- json.load(f)方法使用*.json备忘
- 竖直ProgressBar(VerticalProgressBar),不用那么麻烦
- J2MEWTK提供六种模拟器
- 让iOS开发变得更有效率-分类、工具类
- 自定义View之交替圆环
- 读书笔记-java网络编程-4Internet-InetAddress类
- 图表部件设置X轴节点的错位显示
- 判断二叉树是否为平衡二叉树(BST)
- 114. Flatten Binary Tree to Linked List
- 判断当前星期几
- C#简单查询SQLite数据库是否存在数据的方法
- Logstash使用grok过滤nginx日志(二)
- Git简单用法
- Android中使用Handler造成内存泄露的分析和总结
- 卡特兰数知识