2015-02-03 3 views
0

У меня возникают проблемы с передачей многомерного массива на функцию из main. Вот пример задачи:Передача многомерного вектора (матрицы) функции в C++

double function(int**); 
int main(){ 
    vector< vector<int> > my_vec; 
    double result; 
    result = funtion(my_vec); //it doesnt recognize the type. my vec 
    return 0; 
} 
double function(int**my_vec){ 
    // DOES STUFF WITH THE DATA 
} 

Что такое правильный способ передачи матрицы функции?

+0

Redeclaring функция для получения правильного типа ссылок на ссылки. эти два типа ('int **' и 'std :: vector >' довольно буквально * миры * друг от друга. – WhozCraig

+0

Вы, безусловно, правы! теперь, когда я знаю ответ, я не знаю, почему я пытался ответить int ** !! –

+0

Пожалуйста, [примите] (http://meta.stackexchange.com/questions/5234) ответ, если вы считаете, что он решает вашу проблему. Это сообщество в целом признает правильное решение. сделайте, щелкнув зеленую галочку рядом с ответом. См. это [изображение] (http://i.stack.imgur.com/uqJeW.png) для справки. Cheers. –

ответ

3

Каков правильный способ передачи матрицы функции?

Изменить подпись function на:

double function(vector< vector<int> >& my_vec); 
+0

Хорошо, это хорошо работает. вы очень много –

2

Правильный путь, чтобы принять аргумент:

double function(vector<vector<int>> const &); 

если функция не должна изменить аргумент, в этом случае использование:

double function(vector<vector<int>> &); 

int** подпись типа для сырых массивов в стиле C: нет причин отбрасывать полезный контейнер C++ здесь.

+0

Хорошо, да, это имеет смысл. –

0

Std :: vector - это не только массив. Это тип STL, whitch имитирует динамический массив. То, что вы проходите, - это простой 2D-массив, такой как int arr[3][3]. Чтобы передать вектор, вам нужно сменить свой заголовок функции на double function(vector< vector<int>> &vec) (или, может быть, double function(vector< vector<int>> vec) - в зависимости от того, что вы хотите сделать)

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