c++ - 操纵向量
问题描述
我正在尝试创建对象类型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 的转换(...”
解决方案
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;
}
推荐阅读
- r - R 中的 FactorMineR 包表示 R 3.6.1 不适用(R3.6.1“脚趾动作”/使用 RStudio 版本 1.2.5019/Ubuntu 18.04.3)
- c++ - Searching for string in the array and/or structure C++
- ios - SwiftUI Picker 选择绑定未更新
- azure - 生产 Web api 托管、容器的 Web 应用程序还是 azure 容器实例?
- python - `import pandas` 错误为 `ModuleNotFoundError: No module named 'pandas.msgpack'`
- batch-file - 如何在 cmd 中模拟“ENTER”键?
- vue.js - 如何在 Vuex 模块中使用 mapGetters
- javascript - 无法从 localStorage 为我在 Nuxt 中的身份验证初始化 Vuex 存储
- java - 写入和读取 txt 文件
- sql - 在一个表的不同行和不同列中查找相同的值 SQL