1

我有一张像

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

如何将此映射作为参数传递给函数说 Perform()?

提前致谢。

4

3 回答 3

3
void Perform( std::map< int, int > r[], size_t numElements );

或者

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

然后,无论哪种方式,调用

Perform( random, 50 );

编辑:对于任何 const 数组大小,也可以按如下方式调用。

Perform( random, sizeof( random ) / sizeof ( random[0] ) );
于 2009-08-31T06:47:04.493 回答
2

假设 Perform() 有某种方式知道随机的大小,您可以将指针传递给随机...例如:

执行(&随机);

或者,您可以使用 std::maps 的 std::list,并将该列表的指针(甚至是副本)传递给 Perform():

执行(随机);或执行(&随机);

当然,这取决于如何声明 Perform。

于 2009-08-31T05:13:19.317 回答
1

根据是否可以制作Perform模板功能,您可以选择

  • 通过 (const) 参考传递地图: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 );
}
于 2009-08-31T08:07:43.303 回答