string
字面值和string 对象相加
要保证+
前后至少有一个是string对象。因为为了与C兼容,字符串字面值并不是string对象。
头文件
在C++中,使用诸如cname
的头文件,而不是使用name.h
的文件。
可变性
对于C++中的字符串,是可变的,因此非常舒适。
string s = "1234567";
s[0] = '0';
C++中合法。在Java中,这样是不可以的,python也是不可以的。
使用下标执行
string s = "11111";
for(decltype(s.size()) i = 0; i < s.size(); i++) {
}
现在发现这种写法比较骚气,推荐使用,不容易出错。
vector
列表初始化与数组数量
如果是{}
,那么就是列表初始化
如果是()
,那么就是数组数量
泛型编程
for循环
在写for循环的时候,可以考虑判断条件用!=
,而不是用<
,这是因为,所有标准库容器的迭代器都定义了==
和!=
,但是不一定定义了<
,这样的做法使得不需要考虑容器类型。
数组
多维数组的理解
想理解数组声明的含义,自内而外,自右向左
多维数组的声明
其实C++中没有多维数组,多维数组实际上是数组的数组。数组可以不规定长度,但是这时候就可以直接由编译器推导出来。数组必须规定是什么类型。
比如
int a[][3][4] = /***具体内容***/
这是合法的。在标准中规定,除了第一个[]中的数字可以省略,别的都不可以省略。但是省略的情况下应该可以被推导出来。具体为什么我也不知道。
例:
int a[3][4];// ok
int b[][4]; // no! [Error] storage size of 'b' isn't known
int c[][4] = {{1,2,3}, {4,5,6}, {6, 8}}; // ok
int d[3][4] = {{1,2,3}, {4,5,6}, {6, 8}}; // ok