我有兩個問題與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