c++ - 在同一对象内插入向量
问题描述
我试图从一个向量插入几个值到同一个向量对象,但它似乎出错了:
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> vec;
for(int i=0;i<9;i++)
{
vec.push_back(i+1);
}
vec.insert(vec.begin(),vec.begin()+2,vec.end()-4); //PROBLEM
vector<int>::iterator ivec=vec.begin();
while(ivec!=vec.end())
{
cout<<*ivec<<' ';
++ivec;
}
cout<<endl;
return 0;
}
我期望从vec.begin()+2
ie 3到 element vec.end()-4
ie 6的元素被插入到向量中。但输出是:
3 1 2 1 2 3 4 5 6 7 8 9
编译器是g++ 4.1.2
. 我在哪里错了?
解决方案
问题在于,当您开始插入元素时,会使该向量的任何现有迭代器无效,包括指定您尝试插入的范围的迭代器。简单的解决方案是先复制要插入的向量切片。
vector<int> tmp(vec.begin() + 2, vec.end() - 4);
vec.insert(vec.begin(), tmp.begin(), tmp.end());
推荐阅读
- jenkins - 当状态为“一些检查尚未完成”时,Github PR 不显示详细信息
- reactjs - React 与 React 的原生兼容性
- ansible - Ansible:如何修改字典列表
- emacs - 使用 Cc Cf C-
在 AucTeX 中随机插入旧 TeX 风格 ({\sc xxx}) 或现代风格 (\tesxtsc{xxx}) 的字体命令 - javascript - 我们不能使用普通的 Ember 对象来代替 Ember Mixin 吗?
- swift - SwiftUI 列表中的自定义按钮
- c# - 构建错误:“ResolveTargetingPackAssets”任务意外失败
- javascript - 并行和定时运行自定义 NPM 命令
- java - Java Bean 验证在 Spring 存储库中无法按预期工作
- javascript - 使经典的 javascript 3rd 方应用程序在现有的 react/node 应用程序中工作