back_inserter插回自己出错,VS2008

elemusic 2011-09-18 05:21:23
C++标准库的例子7.42,环境VS2008

编译时不报错,运行出错。

main.cpp

#include <iostream>
#include <vector>
#include <algorithm>

#include "print.h"

using namespace std;

int main()
{
vector<int> coll;

back_insert_iterator<vector<int> > iter(coll);

*iter = 1;
++iter;
*iter = 2;
++iter;
*iter = 3;

PRINT_ELEMENTS(coll);

back_inserter(coll) = 44;
back_inserter(coll) = 55;

PRINT_ELEMENTS(coll);

coll.reserve(2*coll.size());

copy(coll.begin(), coll.end(), back_inserter(coll));//这里出错,
//如果back_inserter插入其他,比如coll2,另外一个vector的就正常,怎么回事?VS又不按标准办事么?

PRINT_ELEMENTS(coll);


return 0;
}


print.h


#include <iostream>

template <class T>
inline void PRINT_ELEMENTS(const T& coll, const char* optcstr="")
{
typename T::const_iterator pos;

std::cout<<optcstr;
for(pos=coll.begin();pos!=coll.end();++pos){
std::cout<<*pos<<" ";
}
std::cout<<std::endl;
}



...全文
79 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2011-09-18
  • 打赏
  • 举报
回复
3本逆序看。
elemusic 2011-09-18
  • 打赏
  • 举报
回复
您推荐一下看的顺序吧。我现在就看过一本C++的书,就是C++ Primier,现在看C++标准库,打算看完这个看Effective C++,然后Effective STL,看这样是不太合理,所以请教一下合理的顺序。
taodm 2011-09-18
  • 打赏
  • 举报
回复
书得按正确的顺序一本一本看。你看错顺序的话,看得越多就越糟糕。
[Quote=引用 3 楼 elemusic 的回复:]
先把这本看完,打错了。书得一本一本看吧,呵呵。能先说说这个的原因么?
[/Quote]
elemusic 2011-09-18
  • 打赏
  • 举报
回复
就是说back不保证是否失效,release下正好运气好没出问题,而debug下出了,对么?
机智的呆呆 2011-09-18
  • 打赏
  • 举报
回复
使用vector时出现问题,一半是迭代器失效导致的。
机智的呆呆 2011-09-18
  • 打赏
  • 举报
回复
back_inserter是一个适配器,封装了push_back
所以back_inserter(coll)会导致迭代器失效。
elemusic 2011-09-18
  • 打赏
  • 举报
回复
试了一下,release下也没问题,就是这个debug下就出错,非常怪。
顺便,打过SP1补丁。
elemusic 2011-09-18
  • 打赏
  • 举报
回复
哦我是debug下的,你的环境也是vs2008没问题么?
iamnobody 2011-09-18
  • 打赏
  • 举报
回复
运行正常的说,。。
elemusic 2011-09-18
  • 打赏
  • 举报
回复
先把这本看完,打错了。书得一本一本看吧,呵呵。能先说说这个的原因么?
elemusic 2011-09-18
  • 打赏
  • 举报
回复
还没看effective呢,我先把这本看忘了,您能先回复一下这个问题的原因么?
taodm 2011-09-18
  • 打赏
  • 举报
回复
认真找本《effective stl》看看吧。

64,636

社区成员

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

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