c++ - 为类 std::vector<> 的结构成员重载 operator=

标签 c++ vector struct

假设我有以下结构:

struct Parameter {
  double value;
  double error;
};

所以我通常使用该结构的 vector (即 std::vector<Parameter> ),偶尔我想设置一个 vector 的(但不是错误) 通过使用 operator= 在该参数 vector 中为方便起见,使用标准的 std::vector。

std::vector<Parameter> vector_of_parameters;
std::vector<double> vector_of values;
....
vector_of_parameters = vector_of_values;

为此,我试图重载 operator=对于这个结构如下:

std::vector<Parameter> operator=(const std::vector<double>& v) {
  this->clear();
  for (const auto& i:v) {
    Parameter p;
    p.value = i;
    this->push_back(p);
  }
  return *this;
}

但这将返回一个错误,提示 std::vector operator=(const std::vector& v) must be a non-static member。因此,如果我理解正确的话,我必须将其定义为运算符的成员函数:

std::vector<Parameter>::operator=(const std::vector<double>& v) {
  this->clear();
  for (const auto& i:v) {
    Parameter p;
    p.value = i;
    this->push_back(p);
  }
  return *this;
}

现在的错误是说 syntaxis with template<>,但我没有真正看到它,也没有理解它,也不知道我还能做些什么。

最佳答案

您不能重载 std::vector 的赋值运算符. operator =必须是一个成员函数,你不能将成员函数添加到 std::vector .

你可以做的是做一个像create_parameters这样的便利函数这需要 std::vector<double>并返回 std::vector<Parameter> .看起来像

std::vector<Parameter> create_parameters(std::vector<double> const& params)
{
    std::vector<Parameter> ret(params.size());
    std::transform(params.begin(), params.end(), ret.begin(),
                   [](auto value) { return Parameter{value, 0}; });
    return ret;
}

然后

vector_of_parameters = vector_of_values;

会变成

vector_of_parameters = create_parameters(vector_of_values);

关于c++ - 为类 std::vector<> 的结构成员重载 operator=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54200865/

相关文章:

c++ - 有效地遍历 vector 中的值

c - 如何正确分配新的字符串值?

c - 我如何让它编译为 x64

c++ - 使用正则表达式 c++ 从单词和定界符之间的字符串中提取所有子字符串

c++ - Libnodave - 使用 TCP 连接的 daveStart() 错误

c++ - 公式序列

c++ - 二维 vector 和 vector map 有什么区别?

c++ - 递归排序 vector 的最简单方法?

c++ - 为什么 boost asio 函数 expires_from_now() 取消 deadline_timer?

arrays - 来自相应形状的数组结构的数据