如果我有这样的东西:vector<string> v{"lorem", "ipsum"};
这样循环是否更好:for(string s : v){ ... }
或类似于:for(string &s : v){ ... }
所以我的问题是,这种类型的循环是否复制了数据(因此最好使用引用(?
它们在功能上非常不同
试试这个
vector<string> v{ "lorem", "ipsum" };
for (string s : v) { s = "dd"; }
cout << v[0];
for (string& s : v) { s = "yy"; }
cout << v[0];
你会看到第一个给你一个元素的副本
第二个是对向量中元素的引用。
因此,使用哪一个真正取决于你想做什么。
如果你只是在阅读,那么第二个更好,因为它不会创建副本(我相信字符串在这种情况下非常有效,但在一般情况下也是如此(