【发布时间】:2021-06-10 09:32:15
【问题描述】:
我目前正在使用 C++,处理字符串向量。
假设我有一个名为“temp”的一维字符串向量。在“temp”的每个索引处,都有一个包含三个单词/字符的字符串。假设 temp[0] = "Hello hi 3"
我定义了一个名为“splits”的函数,它接收一些字符串,删除空格,并将结果放在一个名为“res”的字符串向量中。因此,在 temp[0] 上使用 'splits' 函数会导致:
res[0] = hello
res[1] = hi
res[2] = 3
我想对保存在“链接”中的每个字符串使用“拆分”函数,并将其传递到名为“totalResults”的字符串的二维向量中。因为我不知道“链接”的大小,所以我知道我需要动态分配这个 2D 字符串向量。
到目前为止,我有:
vector<vector<string>> totalResults //dynamically allocated 2d vector of strings
vector<string> temp;
for (int i = 0; i<rows; i++)
{
for (int j = 0; j<cols; j++)
{
temp=splits(links[j])
totalResults[i][j].push_back(temp[0][j]));
//using splitting function on links[i], and pushing it into the 2d vector
}
}
在这个例子中,我希望“hello”进入totalResults[0][0],“hi”进入totalResults[0][1],“3”进入totalResults[0][ 2]。 在 totalResults 的第二行中,我希望发生相同的分配,但是当在 'links[1]' 上使用 'splits' 时。
我已经单独测试了 'splits' 函数,它按我的预期工作,所以我假设错误可能在于我如何将值推回这个二维向量。我正在测试生成的 2D 矩阵,但什么都没有打印...这些值实际上没有被推入吗?
感谢任何帮助/想法! 谢谢! :)
【问题讨论】:
-
我建议从一个字符串向量开始,然后将一些字符串推送给它们,因为一旦你得到 1D 直线,2D 并不是 ^2 更复杂,而只是 *2 相同。您的代码中的问题与 1D 相同/相似
-
“我需要动态分配这个二维字符串向量。”——不,你不会。使用
std::vector的主要原因之一是您确实不需要 需要动态分配任何东西,因为vector会在幕后处理。 (幸运的是,您的代码没有尝试执行动态分配。) -
totalResults[i][j].push_back(temp[0][j]));将一个字符添加到字符串中,这不是您想要的。 -
嗨@molbdnilo,由于我所做的索引,它是否在字符串中添加了一个字符?与 push_back() 函数本身相反?
-
到目前为止的代码有很多语法错误,导致无法编译。在处理语法正确的minimal reproducible example 时,另请参阅initialize 2d vector in c++。
标签: c++ vector multidimensional-array dynamic