xiekewang 2017-01-12 05:50 采纳率: 0%
浏览 1104

c++中this 为0x1c,自定义的类Vector<string>读取文件内容时报错

主程序如下,当从cin中读入任何数据都没有问题
int main()
{
StrVec sv{ "i","dont","understand" };
for (auto p = sv.begin(); p != sv.end(); p++)
cout << p << " ";
cout << endl;
cout << sv.size() << " " << sv.capacity() << endl;
string s;
while (getline(cin, s)) {
sv.push_back(s);
for (auto p = sv.begin(); p != sv.end(); p++)
cout << *p << " ";
cout << endl;
cout << sv.size() << " " << sv.capacity() << endl;
}
这是试运行效果。
图片说明
但是读取文件中的内容时就出问题:
图片说明
int main()
{
/*StrVec sv{ "i","dont","understand" };
for (auto p = sv.begin(); p != sv.end(); p++)
cout << *p << " ";
cout << endl;
cout << sv.size() << " " << sv.capacity() << endl;
string s;
while (getline(cin, s)) {
sv.push_back(s);
for (auto p = sv.begin(); p != sv.end(); p++)
cout << *p << " ";
cout << endl;
cout << sv.size() << " " << sv.capacity() << endl;
}
/
ifstream in("test.txt");
if (!in) {
cout << "无法打开输入文件" << endl;
EXIT_FAILURE;
}
runQueries(in);
system("pause");
return 0;
}

查看调用堆栈,感觉问题应该是在这里
TextQuery::TextQuery(ifstream &in):vs()
{
string line, word;
while (getline(in, line))
vs.push_back(line);****查看堆栈返回到这里***
for (size_t i = 0; i != vs.size(); i++) {
stringstream sm(*(vs.begin()+i));
while (sm >> word)
m[word].push_back(i + 1);//绑定每个单词和它出现的行号。
}
}
这个问题是C++Primer 5th里第十三章的13.42里的题。
(在你的TextQuery和QueryResult类中用StrvVec类代替vector)

经过反复的测验,我认为可以确定StrVec类是没有问题,但是不明白我定义的push_back读取cin时没有问题,读取文件时就出现问题。

  • 写回答

1条回答 默认 最新

  • devmiao 2017-01-13 16:32
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能