C++ 如何将2D map作为参数传递给c++;?
我有一张像这样的地图C++ 如何将2D map作为参数传递给c++;?,c++,function,stdmap,C++,Function,Stdmap,我有一张像这样的地图 std::map< int, int> random[50]; std::maprandom[50]; 如何将此映射作为参数传递给函数say Perform() 提前感谢。假设Perform()有某种方式知道random的大小,您可以传递一个指向random的指针。。。例如: 执行(&随机) 或者,您可以使用std::maps的std::列表,并传递该列表的指针(甚至副本)以执行() 执行(随机);或执行(&随机) 当然,这取决于Perform的声明方式。假
std::map< int, int> random[50];
std::maprandom[50];
如何将此映射作为参数传递给函数say Perform()
提前感谢。假设Perform()有某种方式知道random的大小,您可以传递一个指向random的指针。。。例如:
执行(&随机)
或者,您可以使用std::maps的std::列表,并传递该列表的指针(甚至副本)以执行()
执行(随机);或执行(&随机)
当然,这取决于Perform的声明方式。假设Perform()有某种方式知道random的大小,您可以传递一个指向random的指针。。。例如:
void Perform( std::map< int, int > r[], size_t numElements );
执行(&随机)
或者,您可以使用std::maps的std::列表,并传递该列表的指针(甚至副本)以执行()
执行(随机);或执行(&随机)
当然,这取决于Perform的声明方式
void Perform( std::map< int, int > r[], size_t numElements );
编辑:对于任何常量数组大小,也可以按如下方式调用它
Perform( random, sizeof( random ) / sizeof ( random[0] ) );
编辑:对于任何常量数组大小,也可以按如下方式调用它
Perform( random, sizeof( random ) / sizeof ( random[0] ) );
根据是否可以使
执行模板功能,您可以选择
- 通过(const)引用传递映射:
void Perform(const std::map(&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 );
}
#包括
//50号硬编码:糟糕的做法!
void Perform(const std::map(&map)[50]){
//C样式数组传递:指针和大小
void Perform(const std::map*p_-maps,size_-t numberofmaps){}
//“modern”C++:从参数推断贴图大小。
模板
void TPerform(const std::map(&map)[N]){
int main(){
std::map m[50];
执行(m);
表演(米,50);
TPerform(m);
}
根据是否可以使执行
模板功能,您可以选择
- 通过(const)引用传递映射:
void Perform(const std::map(&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 );
}
#包括
//50号硬编码:糟糕的做法!
void Perform(const std::map(&map)[50]){
//C样式数组传递:指针和大小
void Perform(const std::map*p_-maps,size_-t numberofmaps){}
//“modern”C++:从参数推断贴图大小。
模板
void TPerform(const std::map(&map)[N]){
int main(){
std::map m[50];
执行(m);
表演(米,50);
TPerform(m);
}
您还可以传递对std::map的std::列表的引用。啊,是的,这就是我使用Perform(&random)Correct的目的-我的错!我想这意味着该睡觉了。很好,如果我造成任何混乱,我很抱歉!您还可以传递对std::map的std::列表的引用。啊,是的,这就是我使用Perform(&random)Correct的目的-我的错!我想这意味着该睡觉了。很好,如果我造成任何混乱,我很抱歉!perform()是一个现有的函数还是您将要编写一个函数?这不是一个映射,而是一个由50个映射组成的数组。这就是你所说的“2D映射”的确切含义吗?perform()是一个现有函数还是你将要编写一个函数?这不是映射,而是一个由50个映射组成的数组。这就是您所说的“2D映射”的确切含义吗?我省略了按值传入数组的版本,假设这会消耗不必要的性能。看起来您将其作为第二个选项“c样式数组传递”包括在内。我不知道还有什么方法可以在经过时真正复制它。:)我指的是真正的值传递,比如Perform(map arg[50])
。虽然这可能会被翻译为指针传递,但事实上。我省略了按值传递数组的版本,假设这会消耗不必要的性能。看起来您将其作为第二个选项“c样式数组传递”包括在内。我不知道还有什么方法可以在经过时真正复制它。:)我指的是真正的值传递,比如Perform(map arg[50])
。虽然这可能被翻译为指针传递,事实上。