我需要将对象插入到现有的对象向量中。我知道我需要使用迭代器来做它,但我不知道它是如何工作的。
我按字母顺序排序矢量,我需要在搜索后得到的精确索引中按名称插入新对象。所以我有这个。
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个向量索引并将所有后续对象移动一个索引?
感谢您的帮助。
答案 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
的第一个元素的位置。
答案 2 :(得分:0)
解决方案:
vector<Person>::iterator iter = people.begin() + index;
people.insert(iter, temp);
参考: