假设我有以下代码:
vector<int> list;
for(auto& elem:list) {
int i = elem;
}
我可以在向量中找到 elem
的位置而不维护单独的迭代器吗?
原文由 Fred Finkle 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设我有以下代码:
vector<int> list;
for(auto& elem:list) {
int i = elem;
}
我可以在向量中找到 elem
的位置而不维护单独的迭代器吗?
原文由 Fred Finkle 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答477 阅读✓ 已解决
这是一个使用 c++20 的非常漂亮的解决方案:
这里使用的主要特性是 c++20 范围、c++20 概念、c++11 可变 lambda、c++14 lambda 捕获初始化程序和 c++17 结构化绑定。有关任何这些主题的信息,请参阅 cppreference.com。
请注意,结构化绑定中的
element
实际上是引用而不是元素的副本(此处无关紧要)。这是因为auto
周围的任何限定符只会影响从中提取字段的临时对象,而不影响字段本身。生成的代码与由此生成的代码相同(至少由 gcc 10.2 生成):
证明: https ://godbolt.org/z/a5bfxz