c++ - C++ - 我想将来自字符串向量指针的数据组合成以下格式的静态字符串向量
问题描述
我的字符串向量具有基于用户想要的动态大小
std::vector<std::string>* allTags = new std::vector<std::string>[tvSize];
填充 allTags 变量
for (unsigned int i = 0; i < tvSize; i++)
allTags[i] = ParseData(vals[i]);
现在假设 allTags 指针的大小为 3,以下是每个中的值:-
allTags[0] = { "0", "1", "2"}
allTags[1] = { "a", "b", "c"}
allTags[2] = { "X", "Y", "Z"}
我想将所有 3 个 allTag 的数据组合在字符串向量中,比如 combine_data。但我想通过以下方式做到这一点: -
combined_data[0] = "0->a->X"; combined_data[1] = "0->a->Y"; combined_data[2] = "0->a->Z";
combined_data[3] = "0->b->X"; combined_data[4] = "0->b->Y"; combined_data[5] = "0->b->Z";
combined_data[6] = "0->c->X"; combined_data[7] = "0->c->Y"; combined_data[8] = "0->c->Z";
combined_data[9] = "1->a->X"; combined_data[10] = "1->a->Y"; combined_data[11] = "1->a->Z";
等等。但我无法为此提出一个算法。任何人都可以帮忙吗?
解决方案
你想要这样的东西:
vector<string> function(int lvl)
{
if (lvl == tvSize) return vector<string>(0);
vector<string> r; // some compilers will complain because of ()
vector<string> v = funtion(lvl + 1);
for(int i = 0; i < allTags[lvl].size(); i++)
{
if (v.size() != 0)
{
for(int k = 0; k < v.size(); k++)
{
string result = allTags[lvl][i];
//result += new string("->").append(v[k]); - memory leak
string pom("->");
result += pom.append(v[k]);
r.push_back(result);
}
}
else{ r.push_back(allTags[lvl][i]); }
}
return r;
}
阅读std::vector 文档。您想要的是每个级别上的所有排列,因此复杂度为 O(n^(r + 1)),其中 n 是每行中的元素数,在您的示例中 r 是 tvSize,您对此无能为力,但是如果您不需要所有排列,则可以在任何递归级别上排除某些元素。所以如果你不需要'c'的排列,你的算法对于O(n ^(r + 1 - l))会更快,其中l是'c'的级别。
推荐阅读
- scala - 荷兰国旗问题的惯用 Scala 解决方案
- twitter - 使用 twitter 应用程序登录时未执行 TWTRLogInCompletion 块
- google-cloud-platform - 如何在 GCP 上的 Dataproc 集群上安装 presto-admin?
- google-play - 使用 anjlab 中的 BillingProcessor 时 Google Play 中的安全性
- php - 执行“GetObjectAcl”时出错导致 403 Forbidden Access Denied
- python - R 或 Python 中的分层数据列表数据整理
- c# - Unity 在应用程序关闭时赚取金币
- mysql - 选择内部连接给出不正确的结果
- android - 没有服务的后台应用程序
- typescript - 元组中的错误类型干扰(rest 和 spread 表达式)