目录
2.2string类对象的访问及遍历操作(Iterators and Element access)
2.4string类对象的修改及相关操作(Modifiers and String operations)
1.auto和范围for
1.1auto关键字
(1)C++11中,标准委员会变废为宝赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
#include <iostram>
using namespace std;
int func1()
{
return 10;
}
int main()
{
int a = 10;
auto b = a; //自动推导变量类型
auto c = 'a'; //常量字符也能推导
auto d = func1(); //使用函数返回值进行类型推导
// 编译报错:rror C3531: “e”: 类型包含“auto”的符号必须具有初始值设定项
// auto e;
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
cout << typeid(d).name() << endl;
return 0;
}
(2)用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&。
#include <iostream>
using namespace std;
int main()
{
int x = 10;
auto y = &x;
auto* z = &x;
auto& m = x;
cout << typeid(x).name() << endl;
cout << typeid(y).name() << endl;
cout << typeid(z).name() << endl;
cout << typeid(m).name() << endl;
return 0;
}
(3)当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
int main()
{
auto aa = 1, bb = 2;
// 编译报错:error C3538: 在声明符列表中,“auto”必须始终推导为同一类型
// auto cc = 3, dd = 4.0;
return 0;
}
(4)auto不能作为函数的参数,可以做返回值,但是建议谨慎使用,最好不用(因为经常用auto作为返回值,会降低代码的可读性,如果该函数用auto作返回值,返回值的类型还需要去函数内部寻找)。
// 不能做参数
void func2(auto a)
{}
// 可以做返回值,但是建议谨慎使用
auto func3()
{
return 3;
}
(5)auto不能直接用来声明数组.
int main()
{
// 编译报错:error C3318: “auto []”: 数组不能具有其中包含“auto”的元素类型
// auto array[] = { 4,5,6 };
return 0;
}
auto使用的地方是当返回值的类型名称过于长的时候可以使用auto进行自动推导,提高编程的效率.
1.2范围for
(1)对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :