首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将一维或二维向量传递给同一类的构造函数

将一维或二维向量传递给同一类的构造函数
EN

Stack Overflow用户
提问于 2019-06-25 09:09:23
回答 2查看 153关注 0票数 0

我将要创建类,处理2维双精度向量。我希望将向量的向量或双精度的简单向量(在这种情况下,第二维是1个元素宽度)传递给构造器。此外,它还用于编辑底层数据的模式对话框,因此,我通过引用传递vector。

下面是我想要实现的一些参考代码:

代码语言:javascript
复制
class TableEditDialog {
    using Table2d = std::vector<std::vector<double>>;

public:
    TableEditDialog(Table2d & data) : m_data( data ) {}
    TableEditDialog(std::vector<double> & data); // ?

private:
    Table2d& m_data;
};

在传递具有N个元素的doubles的简单向量的情况下,我需要m_datavector<vector<double>>,它包含一个元素的N个向量,或者是一个包含N个元素的向量。

我尝试过使用委托构造函数,但没有成功。此外,我还试图在第二个构造函数中创建新的临时2d向量,但它打破了通过引用传递来编辑底层数据的想法。

EN

回答 2

Stack Overflow用户

发布于 2019-06-25 09:17:25

使TableEditDialog成为类模板,以便可以在构造时指定类型。

代码语言:javascript
复制
template<class T>
class TableEditDialog {
public:
  TableEditDialog(T& data) : m_data( data ) {}
private:
  T& m_data;
};

您还可以创建一个函数来帮助进行类型推导:

代码语言:javascript
复制
template<class T>
TableEditDialog<T> make_table_edit_dialog(T& data) {
  return data;
}

然后您可以执行以下操作:

代码语言:javascript
复制
std::vector<double> d1d;
std::vector<std::vector<double>> d2d;

auto ted1 = make_table_edit_dialog(d1d);
auto ted2 = make_table_edit_dialog(d2d);

编辑:

如果要将一维数组的情况转换为二维数组,可以重载一维向量的构造函数,并通过将向量复制到其中来初始化m_data

代码语言:javascript
复制
class TableEditDialog {
  using Array1d = std::vector<double>;
  using Array2d = std::vector<Array1d>;
public:
  TableEditDialog(Array2d& data) : m_data( data ) {}
  TableEditDialog(Array1d& data) : m_data(1, data) {}
private:
  Array2d m_data;
};
票数 2
EN

Stack Overflow用户

发布于 2019-06-25 14:20:08

您可以将一维向量转换为存储元素引用的二维向量。这种解决方案的唯一缺点是,在你完成编辑之前,你不能玩这个一维矢量,否则其他地方的东西可能会崩溃。

以下是示例:

代码语言:javascript
复制
TableEditDialog(std::vector<double> & data) {
    std::vector<std::vector<std::reference_wrapper<double>>> result(data.size());
    std::transform(data.begin(), data.end(), result.begin(), [](double& d) {return {{d}};});
}

不过,我没有对此进行测试,您可能需要在lambda中使用{{std::forward(d)}}

剩下的唯一问题是m_data的定义不同,但访问语义相同,因此您需要使用模板化代码或使用std::variant来访问它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56745595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档