将元素替换为vector的特定位置
Replace an element into a specific position of a vector
我想把一个元素替换为向量的特定位置,我可以直接使用赋值操作吗:
// 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) = 10
或vec[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);
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 是与初始类同一内存位置的重新定位类
- 如何在使用网格布局时重叠qwidgets,并将重叠的widget定位在距离窗口边界特定距离的位置
- 我不知道如何定位最高随机数的位置
- 如何在MFC上设置窗口位置以将其定位到屏幕顶部
- 将QGraphicsSvgItem的中心定位在一个位置上。
- 如何定位WinRT异步方法调用中出现错误的位置
- 重定位表项在平面二进制文件中的存储位置