vector
C++ プログラムで aを使用しており、その一部をvector
関数に渡す必要があります。
C の場合は、(配列を使用して) 次の操作を行う必要があります。
int arr[5] = {1, 2, 3, 4, 5};
func(arr+2); // Pass the part of the array {3, 4, 5}
vector
最後の部分で新規作成する以外に方法はありますか?
vector
C++ プログラムで aを使用しており、その一部をvector
関数に渡す必要があります。
C の場合は、(配列を使用して) 次の操作を行う必要があります。
int arr[5] = {1, 2, 3, 4, 5};
func(arr+2); // Pass the part of the array {3, 4, 5}
vector
最後の部分で新規作成する以外に方法はありますか?
一般的なアプローチは、反復子の範囲を渡すことです。これは、標準ライブラリ コンテナーとプレーン配列に属するものを含む、すべてのタイプの範囲で機能します。
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
。
私も同じ問題に悩まされていました.1つの本当に素晴らしいトリックを見つけました.〜の範囲L
の最小値を見つけたいとします.R
arr
vector<int>arr = {4,5,1,3,7};
int minVal = *min_element(begin(arr)+L,begin(arr)+(R+1));
完全な配列と範囲を渡してから、上記のトリックを適用できることを意味します。