C++ - 迭代从 find_if 返回的 std::vector<>

标签 c++ vector iterator

我正在学习 C++,所以我觉得这应该是一个非常简单的答案 - 但我似乎找不到它。所以,如果它是幼稚的,我提前道歉。

我有一个 std::vector<int>的值,我试图找到 奇数 值的索引。

我正在遵循 here 中的代码:

(在下面重复):

// find_if example
#include <iostream>     // std::cout
#include <algorithm>    // std::find_if
#include <vector>       // std::vector

bool IsOdd (int i) {
  return ((i%2)==1);
}

int main () {
  std::vector<int> myvector;

  myvector.push_back(10);
  myvector.push_back(25);
  myvector.push_back(40);
  myvector.push_back(55);

  std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd);
  std::cout << "The first odd value is " << *it << '\n';

  return 0;
}

此示例打印第一个奇数值。 我如何扩展它来为我提供 myvector 中每个奇数的索引值? ?这是正确的方法吗?

最佳答案

// find_if example
#include <iostream>     // std::cout
#include <algorithm>    // std::find_if
#include <vector>       // std::vector

bool IsOdd (int i) {
  return ((i%2)==1);
}

int main () {
  std::vector<int> myvector;

  myvector.push_back(10);
  myvector.push_back(25);
  myvector.push_back(40);
  myvector.push_back(55);


  std::vector<int>::iterator it = std::find_if (myvector.begin(), myvector.end(), IsOdd); 
  std::cout << "ODD values are: " << std::endl;     

  while(it != myvector.end() ){

    std::cout << *it  << " in position " << (it - myvector.begin())  << '\n';
    it = std::find_if (++it, myvector.end(), IsOdd); 
  }
  return 0;
}

编辑:将 it+1 更改为 ++it 请参阅@David Rodríguez - 下面的 dribeas 评论。

关于C++ - 迭代从 find_if 返回的 std::vector<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21533709/

相关文章:

c++ - 如何在模板中定义迭代器?

haskell - 如何将函数应用于向量列表?

c++ - 在方法中迭代 vector

c++ - 错误 : expected nested-name-specifier before 'xxx'

c++ - 在 bool 中写入非 0 或 1 的值是 UB 吗?如果是,他们如何比较?

python - 使用 NumPy 迭代和修改数组

c++ - 随机访问迭代器 : What am I missing?

c++ - 关于模板函数中 vector 迭代器的问题

c++ - Eigen3 类的模板特化

android - 如何在 Android 的 Imageview 上制作正弦波?