2012-08-13 65 views
1

我正在將JavaScript代碼移植到C++。將JavaScript Array.slice +隱式擴展轉換爲C++向量

僞代碼:

如果n = 1,則APPEND(訂單,訂單)

的JavaScript(順序和訂單陣列):

var order = new array(); 
var orders = new array(); 
//.... 
if (n == 1) 
{ 
    orders[orders.length] = order.slice(); // append copy 
} 

我使用矢量而不是C++中的數組。 的C++代碼,我認爲應該只是:

vector<int> order; 
vector<vector<int> > orders; 
//..... 
orders.push_back(order) 

這是正確的代碼對於上述psudeo和JavaScript代碼?

+1

也是'order'一個數組嗎?你的C++代碼沒有提及有關'order.slice()'的任何內容。 'slice()'也有兩個參數。你沒有。這並不能說明你的意圖。你也不需要'orders.length'。即使在javascript中也有array.push()方法 – 2012-08-13 15:58:02

+0

我編輯過這個問題,並且當參數不存在時它會複製整個數組。我有僞代碼和JavaScript,給定的JavaScript是正確的執行僞代碼,我需要將它們轉換爲C++。 – rajat 2012-08-13 16:05:23

+0

如果您正在複製整個數組,那麼這裏沒有任何「切片」。它是克隆而已。你真的需要一個深層的副本嗎?在你的C++實現中,你已經沒有實現克隆部分 – 2012-08-13 16:09:20

回答

1

你有一個條件n == 1我不知道你爲什麼跳過了你的C++實現。
在評論中你說過你使用slice()來創建原始列表的副本,所以你也需要在你的C++實現中做同樣的事情。

vector< vector<int> > orders; 
vector<int> order; 
//and to clone and append 
std::vector cloned; 
std::copy(order.begin(), order.end(), std::back_inserter(cloned)); 
if(n == 1) 
    orders.push_back(cloned); 
+0

n == 1條件同樣存在C++,抱歉忘了添加它。但爲什麼我需要做一個克隆?我只關心訂單的最終內容。您的代碼和我的代碼中的訂單的最終價值是否相同? – rajat 2012-08-13 16:25:57

+0

你在評論中說,你正在使用'切片'做一個副本 – 2012-08-13 16:27:00

+0

我沒有寫代碼,我只是將它移植到C++。我告訴過你,因爲這是切片功能沒有參數的目的。我想問一下,如果我使用這個C++代碼而不是javascript,訂單的價值是否會相同。 – rajat 2012-08-13 16:31:16