“自动更改意义于c ++ 11”

时间:2013-09-23 00:43:26

标签: c++ c++11 iterator operators

#include<iostream>
#include<string>
#include<iterator>
using namespace std;
int main()
{
    string a("hello world");
    for(auto it = a.begin(); it != a.end() && !isspace(*it); it++ )
    {
        *it = toupper(*it);
    }
    cout<<a;
}

我得到了两个错误。一个是如上所述,“自动更改意味着在c ++ 11中”,另一个是“!=运算符未定义”。从来没有遇到过这个问题。

我只使用了自动操作符,因为本书建议。

我是初学者,大约2个月后回到学习。 遇到困难。

2 个答案:

答案 0 :(得分:7)

使用-std=c++11进行编译时,您的代码运行正常,您可以查看here

您可以在CodeBlocks中的Setting->Compiler->Have g++ follow the C++11 ISO C++ language standard [-std=C++11]中添加该选项。

答案 1 :(得分:2)

正如克里斯所提到的,使用基于范围的for循环要好得多。它更接近C ++ 11的精神 并且它对初学者来说更容易学习。考虑:

    #include <string>
    #include <iostream>
    int main()
    {
       std::string s{"hello, world"}; // uniform initialization syntax is better
       for (auto& c : s)  // remember to use auto&
         if (!isspace(c)) c = toupper(c);
       cout << s << '\n'; // remember the last newline character  
       return 0;
    }

- Saeed Amrollahi Boyouki