您的位置:首页 > 编程语言 > C语言/C++

C++ primer阅读笔记------------字符串,向量和数组

2017-08-01 20:28 260 查看
该博客用于记录自己在阅读过程中不懂的知识点,很少用到但比较重要的知识点以及模棱两可的知识点
string.size() /length()返回值类型为size_type 不是int(用auto类型来承载,无符号整型数)

string 比较运算符实际上是比较第一个相异的字符

多个字符串相加其中一个必须是string(不能两个都为字面值),连续相加与连续输入输出有相似之处

对每个字符操作: range for 如果要改变原串则需要引用

vector<int> v1(10);     //v1 10个元素,每个都被默认初始化

vector<int> v2 {10}   // v2 1个元素,初始化为10

vector<int> v3 (10, 1)   //v3 10个元素每个都为1

vector<int> v4{10, 1}   //v4 两个元素10,1

通常来说圆括号用于构造容器的容量,花括号则可以理解为列表初始化,但例外的情况是,如果花括号中的值不能用于列表初始化则会考虑用于构造容量, 如:

vector<string> v5{10}  //10显然不是string类型,所以10被用于构造容量, v5是容量为10的容器,默认初始化

同理:

vector<string> v6 {10, “a”} //v6 10个初始值为“a”的元素

如果循环体里面有向vector添加元素(非常高效,所以通常不指定vector大小)或改变容量的情况,则不能使用range for

iterator   //读写

const_iterator //只能读

cbegin和cend返回const_iterator

不清楚元素个数,使用vector不使用数组

int (*ptr)[10] = &arr;    //ptr指向一个数组

int (&ptr)[10] = arr;    //ptr引用该数组

int *ptr[10];   //指针数组

int &ptr[10];     //错误!!!不存在引用数组

int a[] = {1, 2, 3};

auto pa(a);    //pa是指向a数组第一个元素的整型指针

decltype(a) a2={1, 1, 1};

int *b = begin(a);    //首元素指针

int *l = end(a);     //尾元素指针

两指针相减的类型为ptrdiff_t(代符号)类似size_type(不带符号)是一种标准库类型

如果要用字符数组给字符串赋值,则字符数组应该以空字符结尾

string对象的加法运算允许一个对象是空字符结尾的字符数组(不能2个都是)

当需要用string初始化c风格字符串时用c_str() 例:

const char *str = s.c_str();

然而如上这样使用如果s发生改变str数组也会失去效用,因为返回的是临时指针,所以应当这样使用strcp(str, s.c_str())

不能使用vector初始化数组,但可以用数组初始化vector,但须指明待拷贝区域的首地址和尾地址, 例:

vector<int> myvec(begin(arr), end(arr));

using int_arr = int[4];

typedef int int_arr[4];   //int_arr 即为4个整数组成的数组的别名
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ primer