如何检查c++stl向量中是否存在值,并将函数应用于向量的每个元素

how to check a value exists in a c++ stl vector and apply a function to every element of the vector?

本文关键字:向量 函数 应用于 元素 存在 何检查 检查 是否 c++stl      更新时间:2023-10-16

我有两个问题与C++中标准库的向量类有关。

  1. 如何检查向量中是否已经存在一个值(比如说一个整数)?

    我想用文字表达如下:;如果整数已经存在于向量中,则下一个,否则将其添加到向量的末尾"

  2. 如何将一个包含参数的函数应用于向量中的每个元素?(似乎我用for_each做不到)

    换句话说:;对于矢量中的每个z元素应用MyAddFn(i;

或者我可能对stl向量序列容器不太满意,我应该定义自己的迭代器?

1)

std::find(v.begin(), v.end(), 5) == v.end() // checks that vector<int> v has no value 5.

2) 例如,使用新的C++11 std::bind,但为了获得真正的建议,我需要更多使用MyAddFn的上下文。

对于1,使用std::find算法。如果元素不存在,它将迭代器返回到末尾。在这种情况下,请添加元素。

第二个问题。您可以使用对象而不是函数:

#include <vector>
#include <algorithm>
class apply_me
{
  int multiplicator_;
  public:
  apply_me(const int multiplicator) : multiplicator_(multiplicator)
  {};
  int operator ()(const int element) const
  {
    return element*multiplicator_;
  };
};
int main()
{
  std::vector<int> v;
  std::transform(v.begin(), v.end(),v.begin(), apply_me(3));
}