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

标签 c++ vector struct

因此,我有两个不同的结构体(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/

相关文章:

r - 如何检查向量中的每个元素在R中是否为整数?

c++ - 在基于范围的循环与标准循环中删除 vector 元素

C: 结构中的结构

c - 如何将数据从 GHashTable 存储到 C 中的结构

c++ - 怎么理解 "Point of Instantiation"的意思

c++ - 比较不同的 vector 迭代器并从第一个 vector 中删除元素

c++ - 离开范围时,我的 boost managed_shared_memory 似乎没有从内存空间取消映射

c++ - erase-remove 习语的性能增益来自哪里

c++ - 如何在 C++ 中访问数组结构内部的数组结构?

c++ - 数组类型的模板参数推导