我是初学者,我试图掌握这个C ++任务。我应该读取一个文件并将其放入一个向量中,对其进行排序,然后将其输出到一个新文件中的3个单独的非成员函数中,但由于某种原因,它们不会运行。从来没有输出过新的文件,我甚至把完成的cout放在那里测试函数是否正在运行,但我每次都没有得到任何结果。如果我能得到一些帮助,我将不胜感激,谢谢!
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include "stdafx.h"
using namespace std;
void readtoVector(vector<string>& weblog)
{
string line;
fstream myFile;
myFile.open("weblog.txt");
if (myFile.fail()){
cerr << "File not available" << endl;
}
if (myFile.is_open()){
for (line; getline(myFile, line);){
weblog.push_back(line);
}
myFile.close();
}
}
void sortVector(vector<string>& weblog)
{
sort(weblog.begin(), weblog.end());
}
void writeVector(const vector<string>& weblog)
{
ofstream myFile;
myFile.open("newWeblog.txt");
for (int i = 0; i > weblog.size; ++i){
myFile << weblog[i] << endl;
}
myFile.close();
cout << "done";
}
int main()
{
vector<string> weblog;
readtoVector(weblog);
sortVector(weblog);
writeVector(weblog);
system("pause");
return 0;
}
编辑:修复了readtoVector中的引用问题
答案 0 :(得分:5)
您忘记使用readtoVector
参数的参考。该函数在向量的本地副本上运行;原件仍然是空的。
答案 1 :(得分:2)
在void readtoVector(vector<string> weblog)
中,您将向量的副本发送到函数而不是实际向量,然后在函数中填充容器。因此,当函数调用返回时,向量将返回堆。
您应该像使用其他功能一样发送引用:
void readtoVector(vector<string>& weblog)
除了你的代码没有编译。这条线
for (int i = 0; i > weblog.size; ++i){
函数void writeVector()
中的已请求向量大小。您应该调用成员函数size()
而不是直接请求它。您的情况也不会评估为真。它应该是<
。
for (int i = 0; i < weblog.size(); ++i)
解决这个问题,使用Visual Studio 2013,您的代码在我的机器上完美运行。
答案 2 :(得分:1)
writeVector()
中的以下行不应编译:
for (int i = 0; i > weblog.size; ++i){
我想你想要这个:
for (int i = 0; i < weblog.size(); ++i){
注意size()
是一个成员函数,需要函数调用运算符,循环条件应该是less than
。