-1

提供一点背景知识,我有三个主要课程客户,旅游,雇用。
客户将在其构造函数中包含基本的客户数据,例如客户名称、客户 ID。
作为 GuidedTours 的基类的 Tour 具有类似的数据。
Hires 是一个类,其中包含可以由客户租用的设备的详细信息

主要问题

我们需要从大型文本文件中读取所有这些类的数据,并将它们基本上存储在不同的数据结构 Map、List、Vector 中,以对所有这些数据结构进行性能界限检查。
所以我可以看到它工作,但最让我困惑的部分是我如何初始化不同的对象

1 如果我从 main 读取它,将行标记 如下. 我是否必须在默认 Tour() 构造函数中初始化数据结构。 这是一个好的编程习惯吗?我们需要对每个数据结构进行一段时间,以便能够提供图形表示和不同结构之间的偏差,但我将使用向量来存储我所有的 Tour、Customer、Hire 指针在 main.cpp 中,是否有对性能的任何显着影响。
Tour *newtour = new Tour();
newTour.addtoMap(tokenise, data, will, go, here);


2 如果我以
Tour *newtour = new Tour(tokenised, data, goes, here);
这种方式执行以下操作,我会将值传递给构造函数,因此我将不得不在我觉得不好的构造函数中执行我的 Map 实现。
有没有其他方法可以解决这个问题,我喜欢这种方法,但我无法想象我将如何以及在哪里实现我的地图来存储这些数据?

我是 C++ 新手,我想以一种方式实现它,这样做的原因是为了支持 OOP 方法。如果有任何其他方式分开我是开放的。

我看过另一个有类似问题的线程,但他有 3.8gb 的数据文件,我的只有 934 kb,但对我来说足够大。

4

3 回答 3

2

如果您想从文本文件中读取这些类,我的建议是为输入流和操作符提供一个构造函数来序列化每个类的数据。执行此操作的 c++ 方法通常是这样的:

class Tour {
public:
   Tour(std::istream & input);
   friend std::ostream & operator<<(sd::ostream & channel, Tour const & t);
   friend std::istream & operator>>(std::istream & channel, Tour & t);   
};

编辑:参数的顺序不正确,我改变了它。对不起,我错了。

查看本教程以了解流。operator<< 必须能够将您的类写入std::stream. operator>> 必须能够读取它。如果默认构造一个类没有意义,则流构造函数是一个好主意,但至少要提供 operator<< 和 operator>>。

一旦您可以读/写您的类,将它们放入 a maporvector就是读取文件并使用这些方法的问题。

于 2013-10-08T07:15:12.073 回答
1

您需要将容器和数据对象分开 - 听起来您需要的是数据对象的“简单”数据持有者类,例如一个Customer类。而且,对于其中的每一个,您都需要一个包含此类对象的容器。

您最好使用STL(标准模板库)容器,例如vector(或map,或任何您需要的),例如vector<Customer>. 这些容器将为您完成有关列表管理的所有繁重工作。您只需要编写数据类,例如:

 class Customer
 {
 private:
     std::string m_name;
 public:
     Customer(std::string name): m_name(name) {}
 };

接着:

 std::string nameLoadedFromFile;
 Customer customer(nameLoadedFromFile);
 std::vector<Customer> custList.push_back(customer);
于 2013-10-08T07:03:51.407 回答
-1

使用指针是不好的编程习惯。Tours 向量而不是 Tour 指针向量有什么问题?

对我来说,您的问题的答案是改变您将游览添加到地图的方式。这看起来是最自然的做事方式

Tour newtour(tokenised, data, goes, here); // no pointers
map.addTour(newtour);

因此,您可以将 addTour 作为地图对象的方法,而不是 addtoMap 作为 Tour 的方法。

于 2013-10-08T07:02:58.383 回答