说我有以下内容:
int numFields = 0;
for ( auto & isFieldBlank : InputProcessor::numericFields_isBlank ) {
if ( !isFieldBlank ) {
numFields += 1;
}
}
InputProcessor::numericFields_isBlank
是所有数字输入值的bool
向量,表示输入值是空的true
还是填充的false
。
我有两个相关的问题:
答案 0 :(得分:4)
基于for循环的范围将始终在整个范围内运行,除非您调整范围,否则无法更改。你可以做的是使用std::count
/std::count_if
为你计算实例
auto count = std::count(container.begin(), container.end(), true);
并且要更改开始和停止位置,您可以使用std::next
移动迭代器,如
auto count = std::count(std::next(container.begin(), some_value),
std::next(container.end(), -some_other_value),
true);
答案 1 :(得分:0)
有没有更好的方法来计算向量中填充的字段?
您可以将for
循环的主体简化为:
numFields += (!isFieldBlank);
完整的for
循环将是
for ( auto & isFieldBlank : InputProcessor::numericFields_isBlank ) {
numFields += (!isFieldBlank);
}
有没有办法为for循环迭代器提供起始索引?
你当然可以。但是,您需要使用正常的for
循环,而不是范围 - for
循环。