在向量c ++的索引处插入对象

时间:2014-03-16 02:23:31

标签: c++ vector

我需要将对象插入到现有的对象向量中。我知道我需要使用迭代器来做它,但我不知道它是如何工作的。

我按字母顺序排序矢量,我需要在搜索后得到的精确索引中按名称插入新对象。所以我有这个。

vector<Person>people;


int index =54;
Person temp;

people.push_back(temp);//insert at end of vector
people.insert(index, temp);//doesnt work for int

任何人都可以帮助我如何正确使用迭代器将我的对象插入到第54个向量索引并将所有后续对象移动一个索引?

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

直截了当的答案是你需要一个迭代器。 std :: vector的迭代器支持随机访问,这意味着您可以向迭代器添加或从迭代器中减去整数值。

people.insert(people.begin() + index, temp);

更好的答案是不使用索引,使用迭代器。你的循环是什么?您应该能够重构循环以使用迭代器而不是索引。

答案 1 :(得分:1)

  

我按字母顺序排序了矢量,我需要在搜索后得到的确切索引中按名称插入新对象。

如果vector按字母顺序排序,那么在保持排序顺序的同时将项目插入正确位置的正确方法是使用upper_bound函数:

people.insert(upper_bound(people.begin(), people.end(), temp), temp);

该函数搜索已排序的范围,并返回大于temp的第一个元素的位置。

Here is a demo on ideone.

答案 2 :(得分:0)

解决方案:

    vector<Person>::iterator iter = people.begin() + index;
    people.insert(iter, temp);

参考: