如何告诉编译器在字符串向量中执行“基于范围的循环”?

Fid*_*ity 0 c++ range-based-loop

我创建了一个字符串向量,并想用“基于范围的 for 循环”填充它,但它不起作用。我究竟做错了什么?

\n
invalid initialization of reference of type \xe2\x80\x98int&\xe2\x80\x99 from expression of type \xe2\x80\x98std::__cxx11::basic_string<char>\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

编译器是否不明白我想引用向量元素,而不是字符串?

\n

当我使用经典的“for 循环”时,它工作正常(我可以访问向量的所需元素并在那里写入值),但我不明白为什么它不能与基于范围的 for 循环一起使用。我的一段代码:

\n
#include <iostream>\n#include <vector>\n\ntypedef std::vector<std::string> massive;\nusing std::cin, std::cout, std::endl;\n\nint main() {\n    int N = 0, M = 0;\n    std::string s_n = "";\n\n    cin >> N;\n\n    massive seats(N);\n    \n    for (int& i: seats) {\n        cin >> s_n;\n        seats[i] = s_n;\n    }\n\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

pan*_*nik 9

将循环替换为

for (std::string& s : seats) {
    cin >> s;
}
Run Code Online (Sandbox Code Playgroud)

简而言之,这s是一个遍历元素的引用seats

  • `for (auto&amp; s : Seats) {` 也可以。 (4认同)