8

以下のコードでは、関数 (foo) の引数 ( std::vector) のサイズは、関数を一般的なものにするために任意のサイズにすることができます。ただし、コンテナーのサイズがわかっている場合があるため、 std::array を使用できます。問題は、 を に変換するstd::arrayことstd::vectorです。この問題を解決する最善の方法は何ですか? std::vectorこの場合、常に使用する方が良いですか?

#include <iostream>
#include <array>
#include <vector>

using namespace std;

// generic function: size of the container can be anything
void foo (vector<int>& vec)
{
    // do something
}

int main()
{
   array<int,3> arr; // size is known. why use std::vector?
   foo (arr); // cannot convert std::array to std::vector

   return 0;
}
4

2 に答える 2

16

を渡すと、array渡さfooれたコンテナのサイズが変更されないようです(ただし、vec非定数が渡されるため、要素が変更されているようです)。したがって、要素へのアクセス方法以外は、基になるコンテナーについて何も知る必要はありません。

次に、多くの STL アルゴリズムが行うように、反復子のペアを渡すことができます(そして、反復子の型をテンプレート引数にします)。

于 2014-07-22T17:49:59.880 に答える
0

この関数は、参照によってベクトルを受け入れます。したがって、型 std::array のオブジェクトを関数に渡す意味はありません。関数のパラメーターがベクトルへの const 参照として定義されている場合は、意味があります。

于 2014-07-22T17:50:53.413 に答える