For-loop or std::any_of,我该用哪个?
For-loop or std::any_of, which one should I use?
我无法在 for-loop 和 std::any_of 之间做出决定,例如:
QString fileName = "Whatever"; // might contain a key-string which is part of sMyStringlist()
auto anyTypeContains = [&](const QString& categoryStr)
{
for(auto const &keyStr : sMyStringlist()[categoryStr])
if(fileName.contains(keyStr, Qt::CaseInsensitive))
return true;
return false;
};
if(anyTypeContains("myCategory"))
...
或
QString fileName = "Whatever"; // might contain a key-string which is part of sMyStringlist()
auto anyTypeContains = [&](const QString& categoryStr)
{
return std::any_of(
sMyStringlist()[categoryStr].begin(),
sMyStringlist()[categoryStr].end(),
[&](const QString& keyStr){
return fileName.contains(keyStr, Qt::CaseInsensitive);
});
};
if(anyTypeContains("myCategory"))
...
我认为 for-loop 可能更好,因为每个人都应该熟悉它。是否有使用 any_of 的任何理由,还是只是品味问题?还有其他(更好的)选择吗?提前致谢。
许多 C++ 标准库函数(通常是 <algorithm>
中的函数)可以避免对 for
或其他循环结构的需要。 std::accumulate
是一个早期的例子。
因此更喜欢 std::any_of
而不是循环。
我无法在 for-loop 和 std::any_of 之间做出决定,例如:
QString fileName = "Whatever"; // might contain a key-string which is part of sMyStringlist()
auto anyTypeContains = [&](const QString& categoryStr)
{
for(auto const &keyStr : sMyStringlist()[categoryStr])
if(fileName.contains(keyStr, Qt::CaseInsensitive))
return true;
return false;
};
if(anyTypeContains("myCategory"))
...
或
QString fileName = "Whatever"; // might contain a key-string which is part of sMyStringlist()
auto anyTypeContains = [&](const QString& categoryStr)
{
return std::any_of(
sMyStringlist()[categoryStr].begin(),
sMyStringlist()[categoryStr].end(),
[&](const QString& keyStr){
return fileName.contains(keyStr, Qt::CaseInsensitive);
});
};
if(anyTypeContains("myCategory"))
...
我认为 for-loop 可能更好,因为每个人都应该熟悉它。是否有使用 any_of 的任何理由,还是只是品味问题?还有其他(更好的)选择吗?提前致谢。
许多 C++ 标准库函数(通常是 <algorithm>
中的函数)可以避免对 for
或其他循环结构的需要。 std::accumulate
是一个早期的例子。
因此更喜欢 std::any_of
而不是循环。