我有两个问题与C++中标准库的向量类有关。如何检查C++ stl向量中存在的值并将函数应用于向量的每个元素?
我该如何检查一个值(比方说一个整数)是否已经存在于一个向量中?
我想要的单词如下:“如果整数已存在于向量中,则下一个,否则将其添加到向量的末尾。”
我该如何应用一个函数来保存向量中的每个元素的参数? (看来我不能做到这一点与的for_each)
中的话: “在向量每个Z元素的运用MyAddFn(I,J)”
...也许我不在stl向量序列容器的正确轨道上,我应该定义自己的迭代器?
我有两个问题与C++中标准库的向量类有关。如何检查C++ stl向量中存在的值并将函数应用于向量的每个元素?
我该如何检查一个值(比方说一个整数)是否已经存在于一个向量中?
我想要的单词如下:“如果整数已存在于向量中,则下一个,否则将其添加到向量的末尾。”
我该如何应用一个函数来保存向量中的每个元素的参数? (看来我不能做到这一点与的for_each)
中的话: “在向量每个Z元素的运用MyAddFn(I,J)”
...也许我不在stl向量序列容器的正确轨道上,我应该定义自己的迭代器?
对于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));
}
你在(2)中究竟是什么意思? 'MyAddFn(i,j)'应该应用于什么? – jalf 2012-07-14 13:44:45
您能否详细说明2? – Mahesh 2012-07-14 13:45:49
您是否可以在编译器中使用C++ 11功能?如果你是这样的话,我建议你使用for_each和(lambda)(http://en.wikipedia.org/wiki/Anonymous_function#C.2B.2B)或std :: bind。否则,你可以处理[bind1st和bind2nd](http://www.sgi.com/tech/stl/binder1st.html),但你真的应该看看[boost :: foreach](http:// www .boost.org/DOC /库/ 1_50_0/DOC/HTML/foreach.html)。 – Olwaro 2012-07-14 14:09:03