gpt4 book ai didi

c++ - 如何简单分配不同结构的 vector ?

转载 作者:搜寻专家 更新时间:2023-10-31 02:22:00 25 4
gpt4 key购买 nike

所以我有两个具有相同变量的不同结构(a 和 b)和一个重载的 = 运算符在结构 b 中将 a 转换为 b。

我希望能够简单地将 a 的 vector 分配给 vector b,但编译器给我一个错误:

main.cpp|61|error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::vector<_Ty>' (or there is no acceptable conversion)|

我假设我已经有了重载的 = 运算符,它会简单地迭代 vector a 并为每个实例使用那个 = 运算符。我该怎么做?

代码如下:

#include <iostream>
#include <vector>
using namespace std;

struct a
{
int x, y;
a() {}
a(int _x, int _y)
{
x = _x;
y = _y;
}
};

struct b
{
int x, y;
b(){}
b(int _x, int _y)
{
x = _x;
y = _y;
}

b& operator=(const a& _a)
{
x = _a.x;
y = _a.y;
return *this;
}
};

int main()
{
a a_test(1,2);

std::vector<a> a_vec;
std::vector<b> b_vec;

for(int i = 0; i <10; i++)
{
a_vec.push_back(a_test);
}

/*
for(int i = 0; i<a_vec.size(); i++)
{
b_vec.push_back(a_vec[i]);
}
*/

b_vec = a_vec;

return 0;
}

最佳答案

问题是您的 operator= 仅适用于单个元素,而不适用于整个 vector

您需要定义一个构造函数,将A 转换为B

然后你可以使用std::vector::assign而不是 std::vector::operator= .

#include <iostream>
#include <vector>
using namespace std;

struct A
{
int x, y;
A(): x(0), y(0) {}
A(int x, int y): x(x), y(y) {}
};

struct B
{
int x, y;
B(): x(0), y(0) {}
B(int x, int y): x(x), y(y) {}

// need to construct B from A
B(const A& a): x(a.x), y(a.y) {}

B& operator=(const A& a)
{
x = a.x;
y = a.y;
return *this;
}
};

int main()
{
A a_test(1,2);

std::vector<A> a_vec;
std::vector<B> b_vec;

for(int i = 0; i <10; i++)
{
a_vec.push_back(a_test);
}

// b_vec = a_vec; // not like this
b_vec.assign(a_vec.begin(), a_vec.end()); // like this

return 0;
}

注意:我更改了您的一些名称,因为 C++ 标准规定我们不应以下划线“_”开头变量名称。

关于c++ - 如何简单分配不同结构的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822865/

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