首页 > 解决方案 > 操纵向量

问题描述

我正在尝试创建对象类型teaStep 的数组,以及尝试将列表重新排序为随机列表。

该函数makeSteps旨在启动变量并将它们存储在数组中并输出它们。该函数randomizeSteps旨在在输出新数组之前创建一个整数数组并随机化它们的顺序。只是想知道这是否是正确的方法。[编辑]使用向量,我现在有这个:

  auto makeSteps()
{
    auto all_steps = std::vector<teaStep>{};
    all_steps.emplace_back("Pick your tea", 1);
    all_steps.emplace_back("Boil water", 2);
    all_steps.emplace_back("Get tea bag in mug or pot", 3);
    all_steps.emplace_back("Pour boiled water over teabag", 4);
    all_steps.emplace_back("Wait!", 5);
    all_steps.emplace_back("Remove teabag", 6);
    all_steps.emplace_back("Add milk and/ or sugar", 7);
    all_steps.emplace_back("Mix, drink and enjoy", 8);


    return all_steps;
}

   auto randomizeSteps()
{
    vector <int> ranstep;
    for (int i = 1; i < 9; i++)
        ranstep.push_back(i);
    auto rng = std::default_random_engine{};
    std::shuffle(std::begin(ranstep), std::end(ranstep), rng);
    return ranstep;
}

除此之外,一旦完成,我必须能够利用向量中的对象,但是当我尝试这个时,我得到一个错误,下面的例子:

//should go through the object in vectors, and compare the field Order, to int a.
teaStep findStep(int a, std::vector<teaStep> vectors)

{
    for (int b = 0; b < 8; b++)
    {
        teaStep test = vectors[b];
        if (test.getOrder == a)
            return test;
    }
}

我得到的错误是“没有从 int 到 int 的转换(...”

标签: c++arrayspointersvector

解决方案


You return a pointer to a local variable here:

    teaStep arr[] = /* ... */;
    return arr;
}

The lifetime of arr ends as soon as you exit makeSteps (at the closing }). And whenever you manipulate the return value of makeSteps, you get garbage.

Try and use std::vector instead of plain C arrays, for instance:

auto make_steps()
{
    auto steps = std::vector<teaStep>{};
    steps.emplace_back("Pick your tea", 1);
    steps.emplace_back("Boil water", 2);
    steps.emplace_back("Get tea bag in mug or pot", 3);
    steps.emplace_back("Pour boiled water over teabag", 4);
    steps.emplace_back("Wait!", 5);
    steps.emplace_back("Remove teabag", 6);
    steps.emplace_back("Add milk and/ or sugar", 7);
    steps.emplace_back("Mix, drink and enjoy", 8);
    return steps;
}

推荐阅读