继C++小知识1
五.
string类中的size()函数和length()函数的区别?
(1)size
语法:
size_type size();
size()函数返回字符串中现在拥有的字符数。
(2)长度(length)
语法:
size_type length();
length()函数返回字符串的长度. 这个数字应该和size()返回的数字相同.
vector有size()函数得到大小,string有length()函数得到长度,注意都是0~xx-1哦
六
.四种
列表初始化
(1) int a = 0;
(2) int a = {1};
(3) int a{2};
(4) int a(3);
如果使用等号(=)初始化一个变量, 实际上执行的是
拷贝初始化
!编译器把等号右侧的初始值拷贝到新创建的对象去。
如果不使用等号(=),则执行的是
直接初始化
!
平时情况下,这四种初始化方式可以相互等价使用,不过有几种特殊情况:
第一:使用拷贝初始化的时候(即使用=时),只能提供一个初始值。见P76页
第二:如果提供的是一个类内初始值,则只能使用拷贝初始化或使用花括号{}的形式初始化,记住不能使用圆括号()。见P64页
第三: 如果提供的是初始化元素值的列表,则只能把初始值都放在花括号里进行初始化,而不能放在圆括号里面:
vector<string> v2 = { "a", "ab", "the" }; //正确
vector<string> v1{"a", "ab", "the"}; //正确
vector<string> v1("a", "ab", "the"); //错误
七.对vector对象来说, 直接初始化的方式适用于三种情况:
(1)初始值已知并且数量较少
(2)初始值是另一个vector对象的副本
(3)所有元素的初始值都一样
八. vector对象的限制操作:
(1)如果循环体内部包含有向vector对象添加元素的句子,则不能使用范围for语句!!!
范围for语句:
string s;
for (auto c:s) {/**/}
(2)任何一种可能改变vector对象容量的操作, 比如push_back,都会使该vector对象的迭代器失效
九.箭头运算符(->)
箭头运算符把解引用和成员访问两个操作结合到了一起,即
it->empty() 和 (*it).empty() 表达的意思一样