C++ 随记
来源:互联网 发布:php curl 获取请求头 编辑:程序博客网 时间:2024/06/03 21:40
范围for(range for)语句
C++11新标准:
操作表示一个序列的对象中的每个基础元素——对序列中的每个基础元素执行相同的某种操作。因此对string对象可以使用。
若要在范围for语句中改变基础元素的值,必须将循环变量定义成引用类型。
const和vector
const vector<int> c_ivec(10,1); ...........................(1)
vector <const int> ivec(10,1); .......................(2)
上述两句都可以编译通过。
vector为类模板,必须进行实例化才能成为容器类型。
(1)的容器类型为 vector<int>,因此c_ivec从右向左,类型为vector<int>,const限定变量c_ivec,即是限定容器c_ivec不能被改变,所以const的vector是固定的,只读的,因此不能对c_ivec进行修改容器的任何操作(包括push_back操作和对容器元素赋值的操作)。
(2)的容器类型为vector <const int>,即容器ivec的类型为vector <const int>,元素类型为const int。
C++ Primer上有这么一段:
C++ 语言中,大多数类型都可用作容器的元素类型。容器元素类型必须满足以下两个约束:
元素类型必须支持赋值运算。
元素类型的对象必须可以复制。
C++ 语言中,大多数类型都可用作容器的元素类型。容器元素类型必须满足以下两个约束:
元素类型必须支持赋值运算。
元素类型的对象必须可以复制。
因此实际上vector <const int> ivec(10,1);中ivec这样的容器是不存在的。
但是!!!vs2010中:
#include<iostream>#include<vector>#include<string>using namespace std;void main (){vector<const int> ivec(10,1);for(int i=0;i!=ivec.size();i++)cout<<ivec[i]<<" ";cout<<endl;int j=5;ivec.push_back(j);ivec[9]=10;for(int i=0;i!=ivec.size();i++)cout<<ivec[i]<<" ";cout<<endl;}编译通过,并且输出结果:
?????????????
0 0
- 征服C指针-随记
- C语言问题随记
- C语言学习随记
- 数据结构(C)---二分法随记
- 数据结构(C)---汉诺塔随记
- C语言随记(一)
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 随记
- 0007 如何编写程序实现加减乘除计算
- GYM 100247 D. Hamming Distance(水~)
- JavaScript基础--RHS与LHS
- Gym101138D————Strange Queries (莫队算法)
- win7下ReactNative的环境搭建
- C++ 随记
- Bellman-Ford的队列优化
- Retinex算法
- jvm系列(八):jvm知识点总览
- PAT甲级练习1073. Scientific Notation (20)
- [转]EasyPusher实现安卓Android手机直播推送同步录像功能(源码解析)
- numpy的基本操作
- 深度解读|数据化管理的四个层次
- webstorm配置