将元素替换为vector的特定位置

Replace an element into a specific position of a vector

本文关键字:定位 位置 vector 元素 替换      更新时间:2023-10-16

我想把一个元素替换为向量的特定位置,我可以直接使用赋值操作吗:

// 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]);
vec1[i] = vec2[i]

vec1[i]的值设置为vec2[i]的值。没有插入任何内容。你的第二个方法几乎是正确的。不需要+i+1,只需要+i

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

可以使用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]=...


at和insert之间的区别可以通过下面的例子来理解:

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

示例如下: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]中的值

如果你想使用预留内存并且不想改变缓冲区的大小,不要使用std::vector::insert,尝试使用memcpy代替,如下所示:

auto begin = static_cast<const uint8_t*>(data);
memcpy(&data_buffer[write_pos], begin, size);