【发布时间】:2021-03-28 16:18:57
【问题描述】:
以下操作字符串或容器的方式是惯用的吗?
string s = "hello";
for (auto &p : s) {
p = somefunction(p); // somefunction without side effects
}
这意味着在更改包含的元素时迭代一个范围。容器的布局没有被修改,所以迭代器在迭代过程中应该是有效的。
同样的效果当然可以很容易地以不同的方式“编码”,但我感兴趣的是这是否是惯用的方式?
我之前问过一个类似的问题,但这与容器布局被修改的情况有关,这里的答案是:迭代容器的副本。 C++ idiomatic way of iterating over a container that itself is being modified
【问题讨论】:
-
成语可以改变。这实际上取决于具体的用例。例如在这里我会简单地写
s = std::string(5, 'a'); -
是的,这是一个最小的例子,实际上'a'可以在循环期间变化。只是想让代码变得超级简单。也许我做得过火了……
-
那种。问题是,“'a' 在循环中如何变化”将告知易于阅读的代码类型。就像我说的,这取决于代码实际上应该做什么。
-
是的,将分配从
= 'a'更改为= somefunction(p) -
这可能是惯用的,除了布尔值向量(它实际上不是容器)
标签: c++ iterator containers