C++ 在C++;

C++ 在C++;,c++,C++,我有一个非常简单的情况,我不知道如何解决: 我正在解析具有地址(城市、街道和街道编号)的文件,并具有以下类: class Address { std::string city; std::string street; std::string number; }; 我想为我在文件中找到的每个地址创建一个对象,但我不知道有多少地址,因为文件可以更改。是否有一种创建对象数组的方法;还是更合适的解决方案 注意:解析器工作正常,只需设置对象中的值。您可以使用std::vector实现以下目的

我有一个非常简单的情况,我不知道如何解决:
我正在解析具有地址(城市、街道和街道编号)的文件,并具有以下类:

class Address
{
  std::string city;
  std::string street;
  std::string number;
};
我想为我在文件中找到的每个地址创建一个对象,但我不知道有多少地址,因为文件可以更改。是否有一种创建对象数组的方法;还是更合适的解决方案


注意:解析器工作正常,只需设置对象中的值。

您可以使用std::vector实现以下目的:

#包括
结构地址
{
字符串城市;
std::字符串街;
std::字符串编号;
};
布尔地址(地址和地址)
{
//TODO:实现
//TODO:如果已成功解析另一个地址,则返回“true”
}
int main()
{
向量地址;
地址电流;
while(解析地址(当前))
{
地址。推回(当前);
}
返回0;
}

您可以将std::vector用于以下目的:

#包括
结构地址
{
字符串城市;
std::字符串街;
std::字符串编号;
};
布尔地址(地址和地址)
{
//TODO:实现
//TODO:如果已成功解析另一个地址,则返回“true”
}
int main()
{
向量地址;
地址电流;
while(解析地址(当前))
{
地址。推回(当前);
}
返回0;
}

与@Serge类似,但不使用解析器直接定义输入运算符

struct Address
{
  std::string city;
  std::string street;
  std::string number;
  friend std::istream& operator>>(std::istream& in, Address& address) {
      return parseAddress(in, address);
  }
};

std::istream& parseAddress(std::istream& in, Address& address)
{
    //TODO: implement
    //TODO: return stream.
    //          If the parse failed.
    //                Then set the bad bit on the stream.
}
int main()
{
    std::ifstream          file("address.txt");
    std::vector<Address>   addresses(std::istream_iterator<Address>(file),
                                     std::istream_iterator<Address>());
}
结构地址 { 字符串城市; std::字符串街; std::字符串编号; friend std::istream&operator>>(std::istream&in,地址和地址){ 返回地址(in,address); } }; std::istream&parseAddress(std::istream&in,地址&地址) { //TODO:实现 //TODO:返回流。 //如果解析失败。 //然后在流上设置坏位。 } int main() { std::ifstream文件(“address.txt”); std::矢量地址(std::istream_迭代器(文件), std::istreamu迭代器(); }
与@Serge类似,但不使用解析器直接定义输入运算符

struct Address
{
  std::string city;
  std::string street;
  std::string number;
  friend std::istream& operator>>(std::istream& in, Address& address) {
      return parseAddress(in, address);
  }
};

std::istream& parseAddress(std::istream& in, Address& address)
{
    //TODO: implement
    //TODO: return stream.
    //          If the parse failed.
    //                Then set the bad bit on the stream.
}
int main()
{
    std::ifstream          file("address.txt");
    std::vector<Address>   addresses(std::istream_iterator<Address>(file),
                                     std::istream_iterator<Address>());
}
结构地址 { 字符串城市; std::字符串街; std::字符串编号; friend std::istream&operator>>(std::istream&in,地址和地址){ 返回地址(in,address); } }; std::istream&parseAddress(std::istream&in,地址&地址) { //TODO:实现 //TODO:返回流。 //如果解析失败。 //然后在流上设置坏位。 } int main() { std::ifstream文件(“address.txt”); std::矢量地址(std::istream_迭代器(文件), std::istreamu迭代器(); }
使用
std::vector
。它是为这个而做的(需要一堆对象,但我不知道它们中有多少个)<代码> STD::vector < /代码>是最后要考虑的容器。仅当您需要随机访问和连续内存布局时才使用它。第一个选项应该是
std::list
。如果这还不够,请使用
std::deque
。地址是如何分开的?每一行都是地址?@IInspectable出于好奇,您对仅连续内存布局有何建议?我认为除了
array
@IInspectable之外,没有任何东西听起来像是有史以来最糟糕的想法。很少有好的理由不使用
std::vector
,如果有,最好的选择几乎从来都不是
std::list
。使用
std::vector
。它是为这个而做的(需要一堆对象,但我不知道它们中有多少个)<代码> STD::vector < /代码>是最后要考虑的容器。仅当您需要随机访问和连续内存布局时才使用它。第一个选项应该是
std::list
。如果这还不够,请使用
std::deque
。地址是如何分开的?每一行都是地址?@IInspectable出于好奇,您对仅连续内存布局有何建议?我认为除了
array
@IInspectable之外,没有任何东西听起来像是有史以来最糟糕的想法。很少有好的理由不使用
std::vector
,如果有,最好的选择几乎从来都不是
std::list