【发布时间】:2017-11-08 21:16:47
【问题描述】:
我知道我的问题与this one 非常相似,但那里提供的解决方案在这种情况下不起作用。
我要做的很简单,将一个元素放在向量中的特定位置。
#include <vector>
int main()
{
std::vector<int> vec;
vec.reserve(2);
vec.insert(vec.begin() + 0, 0);
vec.insert(vec.begin() + 0, 1);
for (size_t i = 0; i < vec.size(); i++)
{
std::cout << vec.at(i) << "\n";
}
}
输出是
1
0
但我希望输出只是1。
第二次insert,元素被插入0th位置,之前0th的元素移动到1st位置。我希望对insert 的第二次调用与第一次调用具有相同的效果,即将元素插入到第 0 位。换句话说,我希望第二次调用insert 来替换0th 位置的值。我该怎么做?
澄清:
我在这个问题中包含的代码是我想要的一个简短示例。我调用了两次insert,但insert 的第一个参数在两次调用中都是相同的,所以我不明白为什么第二次调用insert 会改变大小。
在我的实际代码中,插入调用受互斥体保护并由std::thread 调用,thread 可能会针对同一位置多次调用insert 函数(insert 的第一个参数),所以我想找到一种不增加向量大小并简单地替换指定位置的值的方法。
【问题讨论】:
-
对于任何投反对票的人,如果您能快速评论一下您这样做的原因,我将不胜感激,以便我改进问题。
-
您已经插入了两次相同的号码。你怎么知道第二个插入在哪个位置?
-
你怎么知道插入发生在错误的位置? @BenjaminLindley:你更快!
-
自编辑以来,这更加令人困惑。你不能说你想“插入,换句话说,替换”。插入和替换是完全不同的操作。插入总是会增加向量的大小。
-
@db7638 没有人能说出你想问什么——这取决于你要更清楚。赋值运算符执行“替换”的操作。
insert函数执行“插入”操作。如果要插入然后替换,则应调用一次insert函数,然后使用一次赋值运算符。不调用两次插入函数。