2010-06-25 35 views
0

我目前正在嘗試學習如何有效地使用C++的STL部分。假設有2個相同長度的矢量需要通過應用某個運算符被轉換爲另一個相同長度的矢量,是否有一種使用STL功能的好方法?將函數應用於2個stl向量

下面是一些僞代碼我想要做的事:

vector<T> a; 
vector<T> b; 
vector<T> result; 

for (int i = 0; i < a.size(); ++i){ 
    result.at(i) = a.at(i) op b.at(i); 
} 

其中「OP」是一些運營商正在爲T類型定義

+0

你說得對學習使用STL算法,C++ 0x中(和lambda表達式)可能會推廣其使用。 – 2010-06-25 14:05:04

+0

很好聽,因爲我認爲學好STL對於獲得C++的熟練程度至關重要。 – shuttle87 2010-06-25 14:24:54

回答

8

您可能需要對尺寸進行一些檢查,但通常您可以使用std::transform

E.g. (爲+ - <functional>包含類模板爲這個函數對象等二元運算符)

std::transform(a.begin(), a.end(), b.begin(), result.begin(), std::plus<T>()); 

您需要確保b.size() >= a.size()result.size() >= a.size()。如果result開始爲空,那麼您可以使用back_insert_iterator來填充它,而不必先調整容器大小。

+0

這正是我尋找的解決方案。在這種情況下,結果開始爲空,那麼使用back_insert_iterator的正確語法是什麼? – shuttle87 2010-06-25 14:12:17

+0

好吧我想我想通了, #include 然後用: std :: transform(a.begin(),a.end(),b.begin(),back_inserter(result),std :: plus ());謝謝你的好回答! – shuttle87 2010-06-25 14:22:52

+0

@ shuttle87:是的,我認爲你是對的。 – 2010-06-25 14:31:56

0

好吧,我可能是錯的,但是:

簡短的回答:沒有

長回答:也許一些聰明應該做這件事,但寫代碼作爲一個循環是更可讀。

它提醒我下列問題:

「中給出的向量x和相同大小的矢量y,同時使得y被排序根據一些謂詞x和y的置換元素」

我無法直接使用某些STL算法解決問題(除了使用繁瑣的即席迭代器類,可能是通用的,但是很難編寫快速排序方式更容易 - 這就是爲什麼我與C++有愛恨關係)

相關問題