4

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

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

    我想要的文字如下:“如果向量中已经存在整数,则下一个,否则将其添加到向量的末尾。”

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

    换句话说:“对于向量中的每个 z 元素应用 MyAddFn(i,j)”

...或者也许我没有在 stl 矢量序列容器的正确轨道上,我应该定义自己的迭代器?

4

3 回答 3

10

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 的上下文。

于 2012-07-14T13:43:36.160 回答
2

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

于 2012-07-14T13:41:57.317 回答
1

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

#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));
}
于 2012-07-14T14:15:13.547 回答