gpt4 book ai didi

c++ - 用 vector 的 vector 的元素初始化 vector 的空 vector

转载 作者:行者123 更新时间:2023-12-02 09:55:57 32 4
gpt4 key购买 nike

我有一个函数,该函数应使用来自字符串类型的给定 vector vector 中的某些元素初始化来自字符串类型的空 vector vector 。我的语法看起来像这样

std::vector<std::vector<std::string>> extract_data_on_userid(const std::vector<std::vector<std::string>> &array, std::vector<std::string> &user_ids, const int nr_of_events)
{
std::vector<std::vector<std::string>> data_extract;
int event_iterator = 0;
int user_id_iterator = 0;

// While loops which extracts the events based on user IDs
while (event_iterator <= nr_of_events)
{
// While loop which finds specified user id in an event
while (user_id_iterator < array[0].size())
{
if (check_id(user_ids, array[0][user_id_iterator]))
{
for (size_t i = 0; i < array.size(); i++)
{
data_extract[i].push_back(array[i][user_id_iterator]);
}
}
user_id_iterator++;
}

event_iterator++;
}

return data_extract;
}

给定的 vector 由不同数量的字符串 vector 组成(至少 2 个)。我的方法应在
check_id(user_ids, array[0][user_id_iterator])

然后将相关事件(user_id_iterator)推送到所有 1D vector 的新 2D vector 中
vector[i:in][user_id_iterator]

进入新发起的 vector
std::vector<std::vector<std::string>> data_extract;

在 for 循环上。
 for (size_t i = 0; i < array.size(); i++)
{
data_extract[i].push_back(array[i][user_id_iterator]);
}

这一切都按预期工作,直到 [user_id_iterator] 行中的 vector [i:in] 的元素被插入 emtpy vector 中。

我最初是否必须初始化 2D Vector data_extract 中的所有 1D vector ?填充 vector 的空 vector 的正确语法是什么,其中某些元素来自 vector 的填充 vector ?
我收到异常(段错误),因为 emtpy vector 未正确初始化。

最佳答案

你犯了一个简单的错误,很容易修复。
你的二维 vector

std::vector<std::vector<std::string>> data_extract;
是空的,在定义之后。这意味着它不包含任何元素,没有维度。甚至不是索引为 [0] 的元素或 [0][0] .因此,您遇到了段错误,因为您正在访问元素 [i] ,这是不存在的。
所以,是的,正如你所假设的,你必须初始化 vector 。有几种可能性。您可以使用 std::vector 设置初始大小构造函数描述 here .数字 3) 或 4)
例如:
std::vector<std::vector<std::string>> data_extract(array.size());
这可能是最合适的解决方案。
您也可以 resize定义后的 vector
data_extract.resize(array.size());
但这是额外的代码行,不需要,因为您可以在构造函数中执行此操作。如果您知道第二个维度的大小,您当然也可以初始化 vector 的两个维度。
std::vector<std::vector<std::string>> data_extract(
array.size(),
std::vector<std::string>(array[0].size(), ""));
顺便一提。您的外部 while 循环是无操作的。
while (event_iterator <= nr_of_events)
event_iterator在循环体中无处使用,内部 while 循环将永远不会运行。这是因为在第二轮外循环中, user_id_iterator已经大于 array[0].size()并且内部循环永远不会运行。
此外,其余的逻辑很难理解。我不确定,为什么你总是提到 array[0] .

关于c++ - 用 vector 的 vector 的元素初始化 vector 的空 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60109573/

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