Skip to content

Instantly share code, notes, and snippets.

@wen-long
Last active August 29, 2015 14:03
Show Gist options
  • Save wen-long/133926e3f8960155caa4 to your computer and use it in GitHub Desktop.
Save wen-long/133926e3f8960155caa4 to your computer and use it in GitHub Desktop.

###C++ Primer第5版 学习笔记

####第三章

  1. string::size返回string::size_type类型,体现标准库机器无关,结果与有符号数运算时要谨慎
  2. vector int初始化与range for
	using vi = vector<int>;
	vi v1(5);
	vi v2(5,8);
	vi v3{9};
	vi v4{9,7};
	auto vv{v1,v2,v3,v4};
	for(auto&& i1: vv) {
		for(auto&& i2 : i1) {
			cout << i2 << " ";
		}
		cout << ", ";
	}
//0 0 0 0 0 , 8 8 8 8 8 , 9 , 9 7 , 
  1. vector string 初始化 vs ("sssss");不合法
  2. 范围for语句体内不应改变遍历序列的大小
  3. const_iterator 是底层 const, cbegin 和 cend 返回 const_iterator
  4. string 和 vector 带有 difference_type 用于存储迭代器之间的距离
  5. 数组下表通常使用 size_t 是机器相关的无符号类型
  6. 指针相减为 ptrdiff_t 类型, 无符号,机器相关
  7. 对数组,auto 与 decltype 结果不同
int ia[10] = {0,1,2,3,4,5,6,7,8,9};
auto ia2(ia);//ia2是指向ia第一个元素的int指针
//相当于auto ia2(&ia[0]);
decltype ia3 = {0,1,2,3,4,5,6,7,8,9};//ia3是10维度的 int 数组
ia3[0] = 10;
  1. begin 和 end 函数返回数组的头,尾后指针
int ia[] = {1,2,3};
int *beg = begin(ia);
int *end = end(ia);
  1. 下标和指针
    1. p[2] 相当于*(p+2)
    2. 因此内置的下标运算符可以处理负值,而标准库限定的必须是无符号类型
  2. C风格字符串不是类型,而是为了表达和使用字符串而形成的写法
  3. string::c_str返回的数组不一定一直有效,改变 string 可能会使之前的数组失效,应尽快复制
  4. 用数组初始化 vector vi ivec(begin(int_arr), end(int_arr));
  5. 多维数组嵌套范围 for 语句结合 auto引用 遍历.
@fenggeren
Copy link

看到的第一篇用中文写的,好亲切。。o(╯□╰)o

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment