【发布时间】:2020-02-07 08:23:06
【问题描述】:
我有一个函数,它应该使用来自字符串类型的给定向量向量中的某些元素来初始化来自字符串类型的空向量向量。我的语法是这样的
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;
}
给定的向量由不同数量的字符串向量组成(至少 2 个)。我的方法应在
中搜索某些 UserIDcheck_id(user_ids, array[0][user_id_iterator])
然后将相关事件(user_id_iterator)推送到所有一维向量的新二维向量中
vector[i:in][user_id_iterator]
进入新发起的向量
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] 中的向量 [i:in] 的元素被推入 emtpy 向量中。
我最初是否必须初始化 2D Vector data_extract 中的所有 1D 向量?填充向量的空向量的正确语法是什么,其中某些元素来自向量的填充向量? 我收到异常(分段错误),因为 emtpy 向量未正确初始化。
【问题讨论】:
-
这个函数有点乱。尝试使用更多的 STL 函数。我很确定您可以将
user_id_iterator-loop 替换为:user_id_it = std::find()。