C++回炉(2)


--- 1.using声明不应该出现在头文件里  对于某些程序来说 不经意的包含了一些名字 可能会引起一些始料未及的冲突


--- 2.getline:

----------------- string的一个函数 返回流参数 读取换行并抛弃

---源码之一:

template<class _Elem,
	class _Traits,
	class _Alloc> 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<int>>;//新标准允许
vector<vector<int> >;//以前的标准规定必须在两个右尖括号后添加空格

----------------- 当确认无法执行列表初始化后  编译器会尝试用默认值初始化来初始化vector对象
---ex:
	vector<string> s{ 10,"hello world" };//s是有十个“hello world”元素的向量

---------------- vector声明时只要指明拷贝区域的首元素地址和尾后地址 是可以用数组初始化的
---ex:
vector<int > c(begin(b), end(b));//c中将有“1 2 3 4 5”5个元素


--- 6.严格来说 string对象不属于容器类型 但是它支持很多容器的操作 比如迭代器

--- 7.关于在循环中使用 “!=” 与 “<”(泛型编程):
---------------------------------------------- C++所有标准库的迭代器都定义了"!=" 而大多数没有定义 "<" 同样的事是C++程序员更愿意使用迭代器而非下标 原因在于这种编程风格在标准库提供的所有容器上都有效

--- 8.关于迭代器:
----------------------- 任何改变迭代器对象容量的操作 都会使其失效
----------------------- 若vector和string对象是const类型 则迭代器只能使用const_iterator 不是const类型iterator和const_iterator都可以用
----------------------- C++11提供了手动申请const_iterator所对应的cbegin()和cend()函数

--- 数组:
------------- C++11引入了可返回数组头指针的函数begin()与返回数组尾下一元素的指针end()
---源码:
template<class _Ty,
	size_t _Size> inline
	constexpr _Ty *begin(_Ty (&_Array)[_Size]) _NOEXCEPT
	{	// get beginning of array
	return (_Array);
	}

template<class _Ty,
	size_t _Size> inline
	constexpr _Ty *end(_Ty (&_Array)[_Size]) _NOEXCEPT
	{	// get end of array
	return (_Array + _Size);
	}

--- 9.标准库类型限定使用的下标类型必须为无符号类型  内置的下标运算无此要求

--- 10.范围for处理多维数组:
---ex:
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;
     }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值