gpt4 book ai didi

c++ - += 在没有 boost 的 vector 上

转载 作者:太空狗 更新时间:2023-10-29 23:23:40 26 4
gpt4 key购买 nike

有没有办法在不使用 boost 或使用派生类的情况下将 += 运算符与 vector 一起使用?

例如。

somevector += 1, 2, 3, 4, 5, 6, 7;

实际上是

somevector.push_back(1);
somevector.push_back(2);
somevector.push_back(3);
etc.

最佳答案

通过稍微丑陋的运算符重载,这并不难实现。这个解决方案可以很容易地变得更通用,但它应该作为一个充分的例子。

#include <vector>

您所需的语法使用两个运算符:+= 运算符和 , 运算符。首先,我们需要创建一个包装类,它允许我们应用 , 运算符将元素压入 vector 的背面:

template <typename T>
struct push_back_wrapper
{
explicit push_back_wrapper(std::vector<T>& v) : v_(&v) { }

push_back_wrapper& operator,(const T& x)
{
v_->push_back(x);
return *this;
}

std::vector<T>* v_;
};

然后,为了将它与 vector 上的 += 结合使用,我们为 vector 重载了 += 运算符。我们返回一个 push_back_wrapper 实例,以便我们可以使用逗号运算符链接回推:

template <typename T, typename U>
push_back_wrapper<T> operator+=(std::vector<T>& v, const U& x)
{
v.push_back(x);
return push_back_wrapper<T>(v);
}

现在我们可以编写示例中的代码了:

int main()
{
std::vector<int> v;
v += 1, 2, 3, 4, 5, 6, 7;
}

v += 1 将调用我们的 operator+= 重载,它将返回 push_back_wrapper 的实例。然后将逗号运算符应用于“列表”中的每个后续元素。

关于c++ - += 在没有 boost 的 vector 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com