25

vectorC++ プログラムで aを使用しており、その一部をvector関数に渡す必要があります。

C の場合は、(配列を使用して) 次の操作を行う必要があります。

int arr[5] = {1, 2, 3, 4, 5};
func(arr+2);  // Pass the part of the array {3, 4, 5}

vector最後の部分で新規作成する以外に方法はありますか?

4

7 に答える 7

32

一般的なアプローチは、反復子の範囲を渡すことです。これは、標準ライブラリ コンテナーとプレーン配列に属するものを含む、すべてのタイプの範囲で機能します。

template <typename Iterator>
void func(Iterator start, Iterator end) 
{
  for (Iterator it = start; it !=end; ++it)
  {
     // do something
  } 
}

それから

std::vector<int> v = ...;
func(v.begin()+2, v.end());

int arr[5] = {1, 2, 3, 4, 5};
func(arr+2, arr+5);

: この関数はすべての種類の範囲で機能しますが、すべてのイテレータ タイプが でoperator+使用されるインクリメントをサポートしているわけではありませんv.begin()+2。代替案については、 および を参照しstd::advanceてくださいstd::next

于 2013-06-07T11:48:17.450 に答える
1
std::vector<char> b(100); 
send(z,&b[0],b.size(),0);

これを試してみてください。

これも読んでください。

于 2013-06-07T11:47:43.747 に答える
0

私も同じ問題に悩まされていました.1つの本当に素晴らしいトリックを見つけました.〜の範囲Lの最小値を見つけたいとします.Rarr

vector<int>arr = {4,5,1,3,7};

int minVal = *min_element(begin(arr)+L,begin(arr)+(R+1));

完全な配列と範囲を渡してから、上記のトリックを適用できることを意味します。

于 2015-10-20T10:17:42.143 に答える