web-dev-qa-db-ja.com

ベクトルの特定の位置に要素を挿入します

ベクトルの特定の位置に要素を挿入したいのですが、割り当てを使用するだけですみます:

// vec1 and 2 have the same length & filled in somehow
vec1;
vec2;

vec1[i] = vec2[i] // insert vec2[i] at position i of vec1

または、insert()を使用する必要があります。

vector<sometype>::iterator iterator = vec1.begin();

vec1.insert(iterator+(i+1), vec2[i]);
54
daiyue
vec1[i] = vec2[i]

vec1[i]の値をvec2[i]の値に設定します。何も挿入されません。 2番目のアプローチはほぼ正しいです。 +i+1の代わりに、必要なのは+iだけです

v1.insert(v1.begin()+i, v2[i])
97
Armen Tsirunyan

at を使用してそれを行うことができます。次の簡単な例を試すことができます。

const size_t N = 20;
std::vector<int> vec(N);
try {
    vec.at(N - 1) = 7;
} catch (std::out_of_range ex) {
    std::cout << ex.what() << std::endl;
}
assert(vec.at(N - 1) == 7);

メソッドatallocator_type::referenceを返すことに注意してください。この場合はint&です。 atを使用することは、vec[i]=...などの値を割り当てることと同等です。


at挿入 には違いがあります。次の例で理解できます。

const size_t N = 8;
std::vector<int> vec(N);
for (size_t i = 0; i<5; i++){
    vec[i] = i + 1;
}

vec.insert(vec.begin()+2, 10);

ここでvecを出力すると、次のようになります:

1 2 10 3 4 5 0 0 0

代わりに、vec.at(2) = 10またはvec[2]=10を実行すると、次のようになります

1 2 10 4 5 0 0 0
12

ここの例を参照してください: http://www.cplusplus.com/reference/stl/vector/insert/ 例:



...
vector::iterator iterator1;

  iterator1= vec1.begin();
  vec1.insert ( iterator1+i , vec2[i] );

// This means that at position "i" from the beginning it will insert the value from vec2 from position i

最初のアプローチは、vec1 [i]の値をvec2 [i]の値に置き換えることでした

0
virlan2004