如何解决如何从文件C ++将数据推送到向量
我在'.csv'文件中有一些数据表,我想将这些数据从该文件中推到向量中,我尝试了push_back,但是它对我没有用,我实际上是一个初学者c ++。有人可以帮我解决这个问题吗?
struct contacts {
string name;
string nickName;
string phoneNumber;
string carrier;
string address;
};
vector <contacts> proContactFile;
这是我从文件中读取值的部分(下)
void readContactDetails() {
ifstream ContactFile;
ContactFile.open("Contact.csv");
string readString;
if (ContactFile) {
while (!(ContactFile.eof())) {
getline(ContactFile,readString); // Read the column headers
for (int i = 0; i <= 10; i++) {
getline(ContactFile,limit[i].name,','); // ',' is the separator
getline(ContactFile,limit[i].nickName,');
getline(ContactFile,limit[i].phoneNumber,limit[i].carrier,limit[i].address); // Read until the end of the line
}
proContactFile.push_back(ContactFile);
}
}
else {
cout << "Error"<< endl;//Show an error message if the file isn't opened
}
}
它总是显示错误消息->
no instance of overloaded function "std::vector<_Ty,_Alloc>::push_back [with _Ty=contacts,_Alloc=std::allocator<contacts>]" matches the argument list
有人可以告诉我这是怎么回事吗?
解决方法
您已经定义了contacts
的向量。您唯一可以推入其中的是contacts
的实例。通常,您的代码应如下所示:
vector <contacts> proContactFile; // define a vector
contacts new_contact; // define an instance of `contacts` struct
new_contact.name = "name"; // put some data
...
proContactFile.push_back(new_contact); // push back that instance into the vector
emplace_back还有另一种方法:
vector <contacts> proContactFile; // define a vector
auto &contact = proContactFile.emplace_back(); // create an instance in-place and get a ref
new_contact.name = "name"; // work with this instance through reference
或者,您可以为构造函数提供数据:
auto &contact = proContactFile.emplace_back("name","nickname",...);
猜您需要这样的东西:
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
struct contacts {
string name;
string nickName;
string phoneNumber;
string carrier;
string address;
};
vector <contacts> proContactFile;
void readContactDetails() {
ifstream ContactFile;
ContactFile.open("Contact.csv");
string readString;
if (ContactFile) {
if (!(ContactFile.eof())) {
getline(ContactFile,readString); // Read the column headers
// reserve place in the vector,since we know how much entries we are going to add
proContactFile.reserve(10);
// do not know what `10` is!!!
for (int i = 0; i < 10; i++) {
// create a new element in the vector and get reference to it
auto &contact = proContactFile.emplace_back();
// read data into the members of the struct
getline(ContactFile,contact.name,','); // ',' is the separator
getline(ContactFile,contact.nickName,');
getline(ContactFile,contact.phoneNumber,contact.carrier,contact.address); // Read until the end of the line
}
}
}
else {
cout << "Error"<< endl;//Show an error message if the file isn't opened
}
}
免责声明:代码演示了std :: vector的用法!我离开了文件阅读的逻辑,与问题中的逻辑相同。在生产就绪代码中,绝对应该添加更多支票!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。