c++ - vector c++ 的奇怪行为

标签 c++ arrays

我有一个问题要问你。假设我有一个 AwesomeData vector ,AwesomeData 类包含一个 AwesomeData vector 。如果我尝试访问第一个 vector 中的 vector ,它无法正常工作。据我所知,这里并不清楚一个更明确的例子:

struct AwesomeData
{
public:
    AwesomeData()
    : beautifulInt(3)
    {}

    int beautifulInt;
    vector<AwesomeData> someVector;
};

int main()
{
    vector<AwesomeData> tata;
    AwesomeData toto;

    toto.someVector.push_back(AwesomeData());
    toto.someVector.push_back(AwesomeData());
    toto.someVector.push_back(AwesomeData());

    tata.push_back(AwesomeData());
    tata.push_back(toto);
    tata.push_back(AwesomeData());


    // So, now tata should containt the data of someVector of toto (3 default    
    // AwesomeData). Instead of that, his capacity is equal to 3, but his
    // size = 0. So, what's wrong ?
    tata = tata[1].someVector;
}

但是,嘿,这还不是全部!我找到了变通方法,但我不知道它为什么起作用。

struct AwesomeData
{
public:
    AwesomeData()
        : beautifulInt(3)
    {}

    int beautifulInt;
    vector<AwesomeData> someVector;
};

int main()
{
    vector<AwesomeData> tata;
    AwesomeData toto;

    toto.someVector.push_back(AwesomeData());
    toto.someVector.push_back(AwesomeData());
    toto.someVector.push_back(AwesomeData());

    tata.push_back(AwesomeData());
    tata.push_back(toto);
    tata.push_back(AwesomeData());


    // If we use a second vector to temporaly stock the vector of toto,
    // everything work as expected
    vector<AwesomeData> tempVector;

    tempVector = tata[1].someVector;
    tata = tempVector;
}

所以有人有想法吗?

非常感谢

最佳答案

标准容器不允许您使用不完整的类型实例化它们。在你的例子中 AwesomeData当您尝试实例化 std::vector<AwesomeData> 时未完全定义.

要实现这一点,您可以查看 boost::container图书馆。

参见 Boost::container

关于c++ - vector c++ 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904716/

相关文章:

c++ - 套接字 : multithreading doesn't work when client reads messages

c++ - 如何在 C/C++ 中的 Windows 下对两个 Unicode 字符或字符串进行不区分大小写的比较?

javascript - 为什么我的函数返回不同的数组?

c++ - 返回值的静态模板函数特化

c++ - 嵌套命名空间中的流运算符重载

c++ - 从 QProcess 执行/bin/登录

php - 将数组提取到全局变量中

javascript - 将 FormArray 转换为数组 Angular

Javascript:从数组中的对象中选择属性

javascript - 谷歌应用脚​​本: Create a new column in array based on value of other columns