【问题标题】:Proper constructor for custom class自定义类的正确构造函数
【发布时间】:2017-07-09 20:37:06
【问题描述】:

我目前正在使用自定义对象来表示图形的节点。该图只是此类对象的一个​​向量。

class node {
public:
   unsigned int vertex;
   unsigned int weight;
   bool operator< (const node &x){ return weight < x.weight; }
   bool operator> (const node &x){ return weight > x.weight; }
};

我面临的问题是,当我需要 push_back() 此类对象时,我无法提出合适的构造函数。

unsigned int u, v, w;
vector<node> G[V];
G[u-1].push_back({v-1, w}); 

这是它工作的唯一方式,但仅适用于 C++11。有没有标准的方法来做到这一点?如果我尝试在不使用 C++11 标志的情况下使用 g++ 进行编译,则会出现错误。 我基本上是在尝试实现 emplace_back()。

编辑: 我需要用旧版本的 C++ 编译我的代码

【问题讨论】:

  • 只用 c++11、c++14、c++17...
  • 是的,我是这个意思。但如果可能的话,我也想找到一种适用于旧版本的方法
  • 好的,所以你应该说“我只能使用 C++03”或类似的东西。
  • 初始化成员的两个参数构造函数有什么问题?这是你要求的还是别的什么?
  • 我在问是否有办法构造这样的对象,它也适用于旧版本的 C++,例如 C++98

标签: c++ class oop constructor c++03


【解决方案1】:

这是它唯一的工作方式,但仅适用于 C++11。

这很好,因为这是当前状态。此外,这可能适用于 C++14、C++17 等,因此您是安全的。


顺便说一句,我猜G[u-1].push_back({v-1, w}); 只是一个示例,因为u 未初始化,这很关键,更不用说其他变量了。


我一直在寻找“向后兼容”的解决方案。

例如定义一个这样的构造函数:

node(unsigned int v, unsigned int w) : vertex(v), weight(w) {}

然后做:

G[u - 1].push_back(node(v-1, w)); 

【讨论】:

  • 好的,但我正在寻找“向后兼容”的解决方案。
猜你喜欢
  • 2018-07-30
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2017-06-10
  • 1970-01-01
相关资源
最近更新 更多