--- 1.using声明不应该出现在头文件里 对于某些程序来说 不经意的包含了一些名字 可能会引起一些始料未及的冲突
--- 2.getline:
----------------- string的一个函数 返回流参数 读取换行并抛弃
---源码之一:
template inline
basic_istream<_Elem, _Traits>& getline(
basic_istream<_Elem, _Traits>& _Istr,
basic_string<_Elem, _Traits, _Alloc>& _Str)
{ // get characters into string, discard newline
return (getline(_STD move(_Istr), _Str, _Istr.widen('\n')));
}
--- 3.string对象和字面值混在一条语句中执行加法操作时 必须严格保证每个加法符号至少一侧是string
--- 4.范围for:
------------------ 有点python中for的感觉 跟auto搭配使用很好
---语法形式:
for (declaration : expression)
statement
--- 5.vector:
----------------- vector 是模板而非类型 声明不要犯低级错误
----------------- 如果组成vector的元素也是vector 那么存在一个问题 老式编译器与新式编译器可能会以不同的标准来判断其合法性
---ex:
vector>;//新标准允许
vector >;//以前的标准规定必须在两个右尖括号后添加空格
vector s{ 10,"hello world" };//s是有十个“hello world”元素的向量
vector c(begin(b), end(b));//c中将有“1 2 3 4 5”5个元素
template inline
constexpr _Ty *begin(_Ty (&_Array)[_Size]) _NOEXCEPT
{ // get beginning of array
return (_Array);
}
template inline
constexpr _Ty *end(_Ty (&_Array)[_Size]) _NOEXCEPT
{ // get end of array
return (_Array + _Size);
}
int arr[3][4]{
{0,1,2,3},
{4,5,6,7},
{8,9,10,11}
};
//用范围for来遍历arr
for (auto &i:arr){ //需要注意的是 若i不是引用类型
//编译器初始化i时则会将原本的数组形式转换为指向该数组首元素的指针形式
//即由int[4] 变为int *
for (auto j:i) {
cout << j << endl;
}
}