矢量循环的起始值

时间:2017-09-27 15:10:49

标签: c++ loops vector iterator

说我有以下内容:

int numFields = 0;   
for ( auto & isFieldBlank : InputProcessor::numericFields_isBlank ) {
    if ( !isFieldBlank ) {
        numFields += 1;
    }
}

InputProcessor::numericFields_isBlank是所有数字输入值的bool向量,表示输入值是空的true还是填充的false

我有两个相关的问题:

  1. 有没有更好的方法来计算向量中填充的字段?
  2. 有没有办法为for循环迭代器提供起始索引?

2 个答案:

答案 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循环。