在C++中,每當一個函數創建了許多(數百或數千個)值,我曾經有過呼叫者傳遞一個數組,我的功能則與輸出值填充:如何從C++函數返回數百個值?
void computeValues(int input, std::vector<int>& output);
因此,該功能將填補用它計算的值向量output
。但是,這並不是很好的C++風格,因爲我現在正在意識到這一點。
下面的函數簽名是更好,因爲它不承諾使用std::vector
,但可以使用任何容器:
void computeValues(int input, std::insert_iterator<int> outputInserter);
現在,調用者可以用一些inserter
撥打:
std::vector<int> values; // or could use deque, list, map, ...
computeValues(input, std::back_inserter(values));
再一次,我們不承諾特別使用std::vector
,這很好,因爲用戶可能只需要std::set
等中的值。(我應該通過值或參考iterator
nce?)
我的問題是:insert_iterator
是正確還是標準的方法呢?還是有更好的東西?
編輯:我編輯了這個問題,以清楚表明我不是在談論返回兩個或三個值,而是數百或數千。 (想象一下,你有回報所有你在某個目錄中找到的文件,或者在圖形等所有邊)其他
爲什麼不只是函數返回一個std :: vector?爲什麼它必須是一個「out」參數? –
2009-02-24 22:14:59
如果矢量包含許多值,那麼只是返回它太昂貴。它將在本地創建,並在返回時複製*。我們想避免複製矢量。 – Frank 2009-02-24 22:39:54