gpt4 book ai didi

c++ - 将 vector 指针 move 到 C++ 中的 vector 派生类?

转载 作者:行者123 更新时间:2023-11-30 05:10:14 25 4
gpt4 key购买 nike

我想将 vector 的指针 move 到我的 A 对象 (this) 的 vector 。我想这样做是因为我使用我的帮助 vector (用于合并排序)并且我想要原始 vector 中的帮助 vector 的值。然而,我只想使用 1 个操作(因此应该通过 move 来完成,而不是复制元素)。

这是我使用的代码:

template<class T>
class A:public vector<T> {
public:
void fillAndMove();

vector<T> help;
}

template<class T>
void A<T>:fillAndMove() {
// Fill a help array with random values
help.resize(2);
help[0] = 5;
help[1] = 3;

// This line doesn't work
*this = move(help);
}

我收到以下错误:

no match for 'operator=' (operand types are 'A<int>' and 'std::remove_reference<std::vector<int, std::allocator<int> >&>::type {aka std::vector<int, std::allocator<int> >}')

我认为问题在于帮助 vector 需要转换为 A 类对象,但我不知道该怎么做。谁能帮帮我?

最佳答案

您想实现 move 赋值运算符,这将在 O(1) 中完成。

template<class T>
class A :public vector<T> {
public:
void fillAndMove();

vector<T> help;

A & operator=(std::vector<T> && rhs)
{
static_cast<vector<T>&>(*this) = move(rhs);
return *this;
}
};

它也允许将法线 vector 分配给您的 A 类,这将保持 help vector 不变,因此您可能希望将此运算符设为 private 并实现为 A 类 public move 赋值运算符。

    test = std::vector<int>{ 5,6 }; // possible - should assigment operator be private?

此代码不可能:

template<class T>
class A :public vector<T> {
public:
void fillAndMove();

vector<T> help;

A & operator=(A && rhs)
{
// Move as you want it here, probably like this:
help = std::move(rhs.help);
static_cast<vector<T>&>(*this) = move(rhs);
return *this;
}

private:
A & operator=(std::vector<T> && rhs)
{
static_cast<vector<T>&>(*this) = move(rhs);
return *this;
}
};

此外,在执行此操作时,您还应该实现 move 构造函数。

关于c++ - 将 vector 指针 move 到 C++ 中的 vector 派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45769751/

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