2013-09-21 3 views
2

Что является эквивалентом от C# для C++ сделать это:C# массивы C++ векторов

int[n][num] card; 
someFunction(card[0]); 


someFunction(int[] card) 
{ 
    .... 
} 

Использование векторов в C++


Также

Является ли этот код в C++ :

std::vector< std::vector <int> > a(numA, vector<int>()); 

эквивалент этого кода в C#:

int[][] a = new int[numA][]; 

Если это не так, пожалуйста, скажите мне, как это должно быть. Спасибо.

ответ

1
vector<vector<int> > card(n, std::vector<int>(num)); 
someFunction(card[0]); 

someFunction(vector<int> vec) 
{ 
    .... 
} 

Это:

std::vector< std::vector <int> > a(numA, vector<int>()); 

и проще

std::vector< std::vector <int> > a(numA); 

являются C++ неровные массивы эквивалентны:

int[][] a = new int[numA][]; 
+0

Это сработало для меня! Оба ответа хороши. Другое дело: знаете ли вы эквивалент копирования массива, подобный этому? A [n] .CopyTo (array, 0) '? –

+0

@iLQ, если 'a' и' array' являются векторами, тогда 'array.insert (array.begin(), a [n] .begin(), a [n] .end());' – cpp

2

Я не знаю, C#, но это выглядит правильно

std::vector< std::vector<int> > card; 
someFunction(card[0]); 


void someFunction(const std::vector<int>& card) 
{ 
    .... 
} 

Используйте &, чтобы указать, что вы передаете вектор по ссылкой, чтобы избежать накладных расходов на копирование самого вектора. Если вы хотите, чтобы someFunction изменил вектор, то снимите const.

Ваш другой код также выглядит хорошо.

+0

Немного больше точный _equivalent_ должен был бы использовать '.at (0)' вместо '[0]'. :) – rightfold

+0

@iLQ Вы должны делать именно то, что я сказал, вектор подобен массиву 1D. – john

Смежные вопросы