在线等,关于stl vector插入元素的问题

QINGYE55 2011-03-24 10:28:05
stl中的vector,可以提供随机迭代器方便的取,但是存好像并不方便啊

比如共有元素10个,我要在3号位置插入一个元素,插入完成后变成11个.

可以用的vector成员函数有, insert

但是insert需要传的参数是iterator,并不是直接的一个索引

需要这样用

insert( iterator pos , XXXelement )

不能这样用

insert( uint nIndex , XXXelement )

那岂不是我要在3号位置插入元素,还需要用索引循环一遍,先找到在3号位置的Iterator,然后才能插入


int nMaxNum = (int)m_buffer.size();

int nCurrentIndex = 0;

for ( vector<int>::iterator pos = m_buffer.begain();
pos != m_buffer.end() ;
++pos )
{
if( nCurrentIndex == nIndex ) //此处的nIndex即为要插入元素的位置,3号位置
m_buffer.insert( pos , xxxxx )
}

这样也太麻烦了吧,为何不提供个直接针对索引的insert呢, <<C++标准库>>和等等网站上都没有查到
...全文
319 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-03-24
  • 打赏
  • 举报
回复
vector不是你用迭代器+几就会到几的,内存会越界访问的,只有push_back或者insert才能动态扩展内存.

我建议你初始化vector(length);直接固定vector大小,或者使用数组.
qq120848369 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qingye55 的回复:]

...各位大大,我是想问vector有没有成员函数,可以方便的直接在索引位置插入元素,而不是先要找到iterator才能插入
[/Quote]

这种使用要求的话,直接开辟固定大小的vector或者数组即可.
lasvegas_xiang 2011-03-24
  • 打赏
  • 举报
回复
vector<int>::iterator pos = vec.begin() + x;
你对迭代器了解不透彻
多看看C++primer 这些都是简单问题,书中讲的很清楚
QINGYE55 2011-03-24
  • 打赏
  • 举报
回复
哈哈,只缘身在此山中
走好每一步 2011-03-24
  • 打赏
  • 举报
回复
vector<int>::iterator pos = vec.begin() + 3;

迭代器支持算术操作的,不用for循环那么麻烦的。
pengzhixi 2011-03-24
  • 打赏
  • 举报
回复
额 vector的迭代器 可以直接用算术运算,你想在哪个位置插入。直接用begin()返回的迭代器加上位移量就是了。
QINGYE55 2011-03-24
  • 打赏
  • 举报
回复
...各位大大,我是想问vector有没有成员函数,可以方便的直接在索引位置插入元素,而不是先要找到iterator才能插入
pathuang68 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pengzhixi 的回复:]

引用 2 楼 qingye55 的回复:
list也不能使用随机的索引插入

没有一个容器说插入和随机访问都很好的。这个本来就是一对矛盾。
[/Quote]
嗯,vector中删除数据的效率相对其他容器要更弱一些。
pengzhixi 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qingye55 的回复:]
list也不能使用随机的索引插入
[/Quote]
没有一个容器说插入和随机访问都很好的。这个本来就是一对矛盾。
pathuang68 2011-03-24
  • 打赏
  • 举报
回复
vector主要用于相对稳定的数据。

楼主参考一下这个吧:http://www.cplusplus.com/reference/stl/

很经典,也很全面,还有示例代码。
QINGYE55 2011-03-24
  • 打赏
  • 举报
回复
list也不能使用随机的索引插入
pengzhixi 2011-03-24
  • 打赏
  • 举报
回复
额,如果插入频繁那么请用list

64,661

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧