Как передать 2D карту в качестве параметра функции в C ++? - PullRequest
0 голосов
/ 31 августа 2009

У меня есть карта типа

std::map< int, int> random[50];

Как я могу передать эту карту в качестве параметра функции скажем Perform ()?

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 31 августа 2009
void Perform( std::map< int, int > r[], size_t numElements );

или

void Perform( std::map< int, int >* r, size_t numElements );

Тогда, в любом случае, позвоните

Perform( random, 50 );

Редактировать: это также можно вызвать следующим образом для любого размера константного массива.

Perform( random, sizeof( random ) / sizeof ( random[0] ) );
2 голосов
/ 31 августа 2009

Предполагая, что Perform () имеет некоторый способ узнать размер случайного числа, вы можете передать указатель на random ... например:

Выполнить (& случайные);

В качестве альтернативы, вы можете использовать std :: list из std :: maps и передать указатель (или даже копию) этого списка в Perform ():

Выполнить (случайный); или выполнить (& random);

Конечно, в зависимости от того, как объявлен Perform.

1 голос
/ 31 августа 2009

В зависимости от того, можете ли вы сделать Perform функцией шаблона или нет, вы можете выбрать

  • передать карту по (постоянной) ссылке: void Perform( const std::map<int,int> (& map)[50] )
  • передать указатель и размер (путь C)
  • создать шаблон, который автоматически выводит размер массива

Это фрагмент кода, иллюстрирующий все три из них.

#include <map>

// number 50 hard coded: bad practice!
void Perform( const std::map<int,int> (& maps ) [50]  ) {}

// C-style array passing: pointer and size
void Perform( const std::map<int,int>* p_maps, size_t numberofmaps ){}

// 'modern' C++: deduce the map size from the argument.
template<size_t N>
void TPerform( const std::map<int,int> (& maps)[N] ) {}



int main() {
    std::map<int,int> m [ 50 ];
    Perform( m );
    Perform( m, 50 );
    TPerform( m );
}
...