C++向量问题

mxmkeep 2009-03-31 09:20:11
一道C++的向量问题,来自《C++程序设计教程》钱能 著
从a.txt中找出-1的那一行,并输出
在VC中编译没错误,但是运行确出现了异常,无法运行
用VS2005运行,因异常中断
提示
static void _Xlen()
{ // report a length_error
_THROW(length_error, "vector<T> too long");
}
麻烦各位大哥大姐看看
a.txt为(第一个表示8行):
8
12 35 77 45
1 2 3 4 5 67 9
12 11 8 9 0
1 -11
2 3 4 5 6 7 8 9 0 -4 5 -1
5 4 3 2 1 6 7
13 34 56 78 99 98
11 111 11 11 11
#include<iostream>
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;

typedef vector<int> VI;
typedef vector<VI> VVI;
void prn(const VI&);
void input(VVI&);
bool findVec(const VVI&,VI&);

int main()
{
VVI matrix;
input(matrix);
VI vec;
if(findVec(matrix,vec))
prn(vec);
return 0;
}

void prn(const VI& v)
{
for(int i=0;i<v.size ();++i)
cout<<v[i]<<" ";
cout<<endl;
}

void input(VVI& m)
{
ifstream in("a.txt");
int n,t;
in>>n;
m.resize (n);
for(string s;n-- && getline(in,s);)
for(istringstream sin(s);sin>>t;m[m.size ()-n-1].push_back (t));
}

bool findVec(const VVI& matrix,VI& v)
{
for(int i=0;i<matrix.size ();++i)
for(int j=0;j<matrix[i].size ();++j)
if(matrix[i][j]==-1)
{
v=matrix[i];
return true;
}
return false;
}

...全文
215 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
庄鱼 2009-03-31
  • 打赏
  • 举报
回复
程序风格虽不好,但无错,可能是编译器问题,你换个软件试试看。
mengde007 2009-03-31
  • 打赏
  • 举报
回复
不行啊,我调试出来了
ypb362148418 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lzy340623339 的回复:]
C/C++ code2 3 4 5 6 7 8 9 0 -4 5 -1
请按任意键继续. . .
[/Quote]

是这个结果,但是为啥会是这样呢?
mxmkeep 2009-03-31
  • 打赏
  • 举报
回复
大家都ok
看来真的是我的编译器问题
狂晕啊...
别浪费大家时间,马上结贴!
谢谢大家了!
mengde007 2009-03-31
  • 打赏
  • 举报
回复
老大,80分都给我好了!
mengde007 2009-03-31
  • 打赏
  • 举报
回复

#include<iostream>
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;
typedef vector<int> VI;
typedef vector<VI> VVI;
void prn(const VI&);
void input(VVI&);
bool findVec(const VVI&,VI&);
int main()
{
VVI matrix;
input(matrix);
VI vec;
if(findVec(matrix,vec)) prn(vec);
return 0;
}
void prn(const VI& v)
{
for(int i=0;i<v.size ();++i)
cout<<v[i]<<" ";
cout<<endl;
}
void input(VVI& m)
{
ifstream in("a.txt");
int n,t;
cin>>n;
m.resize (n);
for(string s;n-- && getline(in,s);)
{
//for(istringstream sin(s);
//sin>>t;
for(int i=0;i<5;i++)
{
cin>>t;
m[m.size()-n-1].push_back (t);
}
}
}
bool findVec(const VVI& matrix,VI& v)
{
for(int i=0;i<matrix.size ();++i)
for(int j=0;j<matrix[i].size ();++j)
if(matrix[i][j]==-1)
{
v=matrix[i];
return true;
}
return false;
}



muyejingfeng100 2009-03-31
  • 打赏
  • 举报
回复

2 3 4 5 6 7 8 9 0 -4 5 -1
请按任意键继续. . .


vc6.0下编译通过,运行没有异常。
楼主,看来你的编译器确实有问题了。
fairchild811 2009-03-31
  • 打赏
  • 举报
回复
没问题啊
ltc_mouse 2009-03-31
  • 打赏
  • 举报
回复
文件a.txt打开成功了吗?
比如可以在 in>>n 之后打印或者断点看看,是否可以正确读入n~
muyejingfeng100 2009-03-31
  • 打赏
  • 举报
回复

2 3 4 5 6 7 8 9 0 -4 5 -1
请按任意键继续. . .


vc2008下通过,没有问题。
lzy340623339 2009-03-31
  • 打赏
  • 举报
回复
在你循环赋值的地方添加上输出句子,就可以快速检查到哪里出了问题了
mxmkeep 2009-03-31
  • 打赏
  • 举报
回复
我的VC6和VS2005都有问题?
还是我的电脑有问题?
郁闷啊....
lzy340623339 2009-03-31
  • 打赏
  • 举报
回复
你单步调试看看问题出在哪里
T技术沙龙 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lzy340623339 的回复:]
C/C++ code2 3 4 5 6 7 8 9 0 -4 5 -1
请按任意键继续. . .
[/Quote]
没有错误,运行和上述一样。可能是你的编译器出问题了
mxmkeep 2009-03-31
  • 打赏
  • 举报
回复
我晕,为什么我的不行啊....
VC中提示内存不能为writed

m.resize(n)
表示重置向量大小为n
lzy340623339 2009-03-31
  • 打赏
  • 举报
回复
2 3 4 5 6 7 8 9 0 -4 5 -1
请按任意键继续. . .
lzy340623339 2009-03-31
  • 打赏
  • 举报
回复
没错呀
chin_chen 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 mxmkeep 的帖子:]
int n,t;
in>>n;
m.resize (n);//这句啥意思,为啥这么做?
[/Quote]
好像是这里出问题了,
liliangbao 2009-03-31
  • 打赏
  • 举报
回复
不好意思~只好帮顶了!

64,637

社区成员

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

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