【问题标题】:Overloading << operator to insert into a vector重载 << 运算符以插入向量
【发布时间】:2015-07-18 17:08:46
【问题描述】:

我发现许多解决方案会重载输出流运算符以打印出向量。我需要做相反的事情。类似的,

vector<string> v;
  v << "String1" << "String2" << "String3" << "String4" << "String5";

我有这段代码,它只添加了第一个字符串。我明白为什么会这样,但我不知道如何添加其他字符串。

template<typename T, typename T2>
vector<T> operator<<(vector<T>& v1, T2 s) {
    v1.push_back(s);
    return v1;
}

【问题讨论】:

  • 返回参考vector&lt;T&gt;&amp; operator...
  • 请不要。 “流”重载已经够糟糕了。如果必须使用运算符,请使用 + 和 - 进行添加和删除。
  • 我想通了。我只需要返回 vector& 而不是 vector

标签: c++ vector operator-overloading


【解决方案1】:

在您的函数中,您将返回输入 vector 的副本。我很惊讶您的编译器没有警告您将临时对象用作预期引用的参数。

将返回类型更改为引用。

template<typename T, typename T2>
vector<T>& operator<<(vector<T>& v1, T2 s) {
//      ^^^
    v1.push_back(s);
    return v1;
}

【讨论】:

  • 你完全正确。我自己想通了,但感谢您的建议。编译器是 VS 2010 - 我很惊讶它也没有警告我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2015-01-07
  • 1970-01-01
  • 2021-09-08
  • 2013-11-10
  • 2013-05-15
  • 1970-01-01
相关资源
最近更新 更多