我正在尝试用向量替换数组,但我无法弄清楚如何。
替换此函数以动态分配向量的内存:
string readFile(string filename, string** list, int size){
*list = new string[size];
ifstream file(filename);
string line;
for (int i = 0; i < size; i++){
getline(file, line);
*(*list + i) = line;
}
file.close();
return **list;
}
我试图将它改为没有运气的载体。非常感谢任何反馈:
string processFile(string filename, vector<string>** list, int size){
*list = new vector<string>(size);
ifstream file(filename);
string line;
for (int i = 0; i < size; i++){
getline(file, line);
*list[i] = line; // error
}
file.close();
return **list; // error
}
答案 0 :(得分:1)
您需要一些正确的错误处理,但基本上,如果您使用容器,则既不需要指针也不需要固定大小:
std::vector<std::string> readLinesFromFile(const std::string& filename)
{
std::vector<std::string> result;
std::ifstream file(filename);
for (std::string line; std::getline(file, line); )
{
result.push_back(line);
}
return result;
}
答案 1 :(得分:0)
有几个问题:
此代码应该可以使用,但未经过测试:
void processFile(string filename, vector<string>& list, int size){
//list = new vector<string>(size); // no need if you get a vector reference
ifstream file(filename);
string line;
for (int i = 0; i < size; i++){
getline(file, line);
list.push_back(line); //the error was because you are assigning string to a vector<string>*
}
file.close();
// you dont have to return, as vector is passed by reference
}
如果你仍然需要使用向量指针
void processFile(string filename, vector<string>** list, int size){
*list = new vector<string>(size); // bad practice
ifstream file(filename);
string line;
for (int i = 0; i < size; i++){
getline(file, line);
(*list)->push_back(line);
}
file.close();
// you dont have to return, as vector is passed by pointer
}
答案 2 :(得分:0)
将* list [i] = line更改为* list-&gt; push_back(line),你应该对第一个错误感到满意。
第二个错误取决于您对返回值的意图。我想return * list-&gt; front();将给出与第一个示例相同的结果,但如果您计划返回的不仅仅是第一行,那么您将需要进行一些连接。您可以创建一个本地字符串,并在阅读时附加每一行。
希望您的老师知道使用新的向量几乎总是C ++中的代码味道,并且出于特定原因正在使用它,并计划稍后修复它。
答案 3 :(得分:-1)
这是一个工作示例。请享用 :) 顺便说一句 - 你不需要传递长度,只需实例化内存并使用push_back方法。
#include <vector>
#include <fstream>
#include <string>
using namespace std;
void processFile(string filename, vector<string>** list, int size);
void main()
{
vector<string>* list = NULL;
processFile("C:\\temp.txt", &list, 13);
int i = 1;
}
void processFile(string filename, vector<string>** list, int size){
*list = new vector<string>();
ifstream file(filename);
string line;
for (int i = 0; i < size; i++){
getline(file, line);
(**list).push_back(line); // error
}
file.close();
}