2012-02-17 22 views
0

我有一個由std::vector表示的「表」,其中每個元素都是boost::fusion::vector。我需要返回此表的「列」表示作爲std::vector,而不復制任何值。這樣做的最好方法是什麼?我正在嘗試構建nviews的std::vector,其中n是列號,但它似乎不起作用。我在正確的軌道上還是有其他方法去解決這個問題?從融合載體的std向量返回列,而不復制

+0

您可以使用C++ 11還是僅限於C++ 03? – ildjarn 2012-02-17 23:25:27

+0

我想我都可以,但我想知道會有什麼不同。 – 2012-02-18 02:56:40

回答

1

根據docs hereboost::fusion::vectorat<N>(s)方法返回對包含元素的引用。

此外,如果您使用boost庫版本1.48,它們支持C++ 11的移動語義。這意味着你可以有一個循環遍歷你的表的大小的函數,用於特定的列號,例如i,並填充一個列向量,該列向量是std::vector。然後,您只需返回此列向量,調用函數將獲得movestd::vector。任何時候都不做任何複製。

您可以在標準頁面閱讀更多關於move semantics here的信息。您還可以觀看Bjarne Stroustrup explaining it in brief here的視頻。跳到第37分鐘,直到第43分鐘。

+0

非常有幫助的答案,謝謝! – 2012-02-18 16:03:38