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()にランダムのサイズを知る何らかの方法があると仮定すると、ランダムへのポインターを渡すことができます...例:

Perform(&random);

または、std::mapsのstd::listを使用して、そのリストのポインター(またはコピー)をPerform()に渡すこともできます。

実行(ランダム); またはPerform(&random);

もちろん、Performがどのように宣言されているかに応じて。

于 2009-08-31T05:13:19.317 に答える
1

テンプレート関数を作成できるかどうかに応じてPerform、次のことを選択できます。

  • (const)参照でマップを渡します:void Perform( const std::map<int,int> (& map)[50] )
  • ポインタとサイズを渡す(Cウェイ)
  • 配列のサイズを自動的に推測するテンプレートを作成します

これは、3つすべてを示すコードフラグメントです。

#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 に答える