转载

C++自动类型推断和基于范围的for循环

在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类型的占位符,通知编译器去根据初始化代码推断所声明变量的真实类型,这样可以让我们的代码更加简洁。 auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。

例如:

auto i = 42;  // i is an int  cout << sizeof(i) <<endl;   //4  // l is a long int.  auto l = 42L;  cout << sizeof(l) <<endl;   //8  // ll is a long long int.  auto ll = 42LL;  cout << sizeof(ll) <<endl;  //8  // l is an long long  map<string, int> m;  m["hello"] = 0;  m["world"] = 1;  for(auto it = m.begin(); it != m.end(); ++it)   cout<< it -> first << " " <<  it ->second << endl;  cout << "------------------------------------------------------------" << endl;

auto还可以作为返回值占位符

auto add(int t1, int t2) {   return t1+t2; }

C++11也可以使用类似”foreach”的语法遍历容器。用这个新的写法,可以遍历C类型的数组、初始化列表以及任何重载了非成员的begin()和end()函数的类型。如果你只是想对集合或数组的每个元素做一些操作,而不关心下标、迭代器位置或者元素个数,那么这种for循环迭代将会非常有用。例如上面的map对象:

for(auto it : m)   cout<< it.first << " " << it.second << endl;

字符串中有多少标点符号

string s("hello world!!");  auto counter = 0;  for (auto c : s)   if(ispunct(c))    //#include <cctype>    counter++;   else if(isalpha(c))    c = toupper(c);   cout << "Punction counter is "<< counter << endl;   //2   cout << s << endl;    //HELLO WORLD!!

参考:

《C++ Primer》

C++11中的自动类型推断和基于范围的for循环 http://blog.csdn.net/huang_xw/article/details/8760403

正文到此结束
Loading...