作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下数据结构:
struct T
{
std::string name;
bool active;
};
然后我想遍历 T 的 vector ,但只针对事件元素:
std::vector<T> myVector;
//fill vector
for(const auto& item: myVector)
{
if(!item.active)
{
continue;
}
//do something;
}
是否有任何功能可以在不使用 if 和/或 continue 语句的情况下实现这一目标?
最佳答案
如果你真的想消除检查而不只是隐藏它,那么使用一个单独的容器来存储元素的索引,其中 active
为真,并替换 for
循环遍历另一个容器中的所有索引。
确保每次 vector 更改时更新索引容器。
#include <string>
#include <vector>
struct T
{
std::string name;
bool active;
};
int main()
{
std::vector<T> myVector;
using Index = decltype(myVector)::size_type;
std::vector<Index> indicesActive;
// ...
for (auto index : indicesActive)
{
auto const& item = myVector[index];
// ...
}
}
如果不了解问题的背景,很难说这是否值得。
请注意,您可能可以更换 T
与 std::optional<std::string>
如果你的编译器已经支持 std::optional
.
关于c++ - for 循环 - 遍历特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47486627/
我是一名优秀的程序员,十分优秀!