将元素插入向量的特定位置

时间:2011-07-17 21:14:24

标签: c++ visual-c++ vector stl insert

我想将一个元素插入到一个向量的特定位置,我可以使用一个赋值:

// 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]);

3 个答案:

答案 0 :(得分:96)

vec1[i] = vec2[i]

会将vec1[i]的值设置为vec2[i]的值。什么都没插入。你的第二种方法几乎是正确的。而不是+i+1,而只需要+i

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

答案 1 :(得分:12)

您可以使用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);

请注意,方法at会返回allocator_type::reference,就是int&。使用at相当于分配vec[i]=...等值。

atinsert之间存在差异,因为可以通过以下示例来理解:

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) = 10vec[2]=10,我们会得到

1 2 10 4 5 0 0 0

答案 2 :(得分:0)

在此处查看示例: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]

中的值