【问题标题】:Pushing back a vector of strings into a 2D vector将字符串向量推回二维向量
【发布时间】: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


【解决方案1】:

根据您的描述,linkscols 元素,您想将每个links[j] 拆分并添加到totalResults

vector<vector<string>> totalResults(cols);
for (int j = 0; j < cols; j++)
{
    totalResults[j] = splits(links[j]); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    相关资源
    最近更新 更多