C++ 如何将向量内容向量转换为单个列向量

C++ 如何将向量内容向量转换为单个列向量,c++,vector,C++,Vector,我有一个向量向量,我想把它的内容放到一个列向量中。i、 e 输入:A=[[1 2][3 4]] 输出:v=[[1][2][3][4]](列向量) 在C++中有一种快速的方法吗? 如下: std::vector<std::vector<int>> a = {{1, 2}, {3, 4}}; std::vector<std::vector<int>> b; for ( auto& row : a ) { for ( auto item:

我有一个向量向量,我想把它的内容放到一个列向量中。i、 e

输入:A=[[1 2][3 4]]

输出:v=[[1][2][3][4]](列向量)

在C++中有一种快速的方法吗?

如下:

std::vector<std::vector<int>> a = {{1, 2}, {3, 4}};
std::vector<std::vector<int>> b;
for ( auto& row : a )
{
   for ( auto item: row )
   {
      b.push_back(std::vector<int>{item});
   }
}
std::向量a={{1,2},{3,4};
std::载体b;
用于(自动和行:a)
{
用于(自动项目:行)
{
b、 向后推(std::vector{item});
}
}
像这样:

std::vector<std::vector<int>> a = {{1, 2}, {3, 4}};
std::vector<std::vector<int>> b;
for ( auto& row : a )
{
   for ( auto item: row )
   {
      b.push_back(std::vector<int>{item});
   }
}
std::向量a={{1,2},{3,4};
std::载体b;
用于(自动和行:a)
{
用于(自动项目:行)
{
b、 向后推(std::vector{item});
}
}

您可以使用
std::back\u插入器
std::copy
每一行,如下所示:

int main()
{
    std::vector<std::vector<int>> v = {{1, 2, 3}, {2, 2, 3}};

    std::vector<int> b;

    for(auto& vec : v){
        std::copy(vec.begin(), vec.end(), std::back_inserter(b));
    }
}
intmain()
{
向量v={1,2,3},{2,2,3};
std::载体b;
用于(自动和矢量:v){
std::copy(vec.begin()、vec.end()、std::back_inserter(b));
}
}

您可以使用
std::back\u插入器
std::copy
每一行,如下所示:

int main()
{
    std::vector<std::vector<int>> v = {{1, 2, 3}, {2, 2, 3}};

    std::vector<int> b;

    for(auto& vec : v){
        std::copy(vec.begin(), vec.end(), std::back_inserter(b));
    }
}
intmain()
{
向量v={1,2,3},{2,2,3};
std::载体b;
用于(自动和矢量:v){
std::copy(vec.begin()、vec.end()、std::back_inserter(b));
}
}

如果要将向量向量中的所有元素复制到单个向量中,请使用两个循环:

std::vector<std::vector<int>> vv = { { 1, 2, 3 },
                                     { 4, 5, 6 },
                                     { 7, 8, 9 } };
std::vector<int> v;
for (auto row : vv) {
    for (auto el : row) {
        v.push_back(el);
    }
}
//print out the vector:
for (auto el : v) {
    std::cout << el << ' ';
}
std::vector vv={{{1,2,3},
{ 4, 5, 6 },
{ 7, 8, 9 } };
std::向量v;
用于(自动行:vv){
用于(自动el:行){
v、 推回(el);
}
}
//打印出矢量:
用于(自动el:v){

std::cout如果要将向量向量中的所有元素复制到单个向量中,请使用两个循环:

std::vector<std::vector<int>> vv = { { 1, 2, 3 },
                                     { 4, 5, 6 },
                                     { 7, 8, 9 } };
std::vector<int> v;
for (auto row : vv) {
    for (auto el : row) {
        v.push_back(el);
    }
}
//print out the vector:
for (auto el : v) {
    std::cout << el << ' ';
}
std::vector vv={{{1,2,3},
{ 4, 5, 6 },
{ 7, 8, 9 } };
std::向量v;
用于(自动行:vv){
用于(自动el:行){
v、 推回(el);
}
}
//打印出矢量:
用于(自动el:v){

不幸的是,我不得不告诉你,至少到目前为止,其他所有答案都不如看上去的那么好

让我们一步一步地看答案,最后我会告诉你如何正确处理它

std::vector<std::vector<int>> v = {{1, 2, 3}, {2, 2, 3}};
std::vector<int> b;
for(auto& vec : v){
    std::copy(vec.begin(), vec.end(), std::back_inserter(b)); // performes single insertion at the end
}
这里也一样。您可以在每次
推回时调整它的大小,这绝对不是必需的

我建议您使用
std::vector::insert
。它自己执行一些内部大小调整

std::vector<std::vector<int>> v = {{1, 2, 3}, {2, 2, 3}};
std::vector<int> b;
for(auto& vec : v){
    b.insert(std::cend(b), std::cbegin(vec), std::cend(vec));
}

最后,您当然可以先调整向量的大小,然后开始复制,但我认为这是错误的处理方法,如果事实上,
std::vector
已经为我们提供了这个解决方案。

不幸的是,我不得不告诉您,至少到目前为止,其他所有答案都没有看起来那么好

让我们一步一步地看答案,最后我会告诉你如何正确处理它

std::vector<std::vector<int>> v = {{1, 2, 3}, {2, 2, 3}};
std::vector<int> b;
for(auto& vec : v){
    std::copy(vec.begin(), vec.end(), std::back_inserter(b)); // performes single insertion at the end
}
这里也一样。您可以在每次
推回时调整它的大小,这绝对不是必需的

我建议您使用
std::vector::insert
。它自己执行一些内部大小调整

std::vector<std::vector<int>> v = {{1, 2, 3}, {2, 2, 3}};
std::vector<int> b;
for(auto& vec : v){
    b.insert(std::cend(b), std::cbegin(vec), std::cend(vec));
}


最后,你当然可以先调整向量的大小,然后开始复制,但我认为这是错误的处理方法,如果事实上,
std::vector
已经为我们提供了这个解决方案。

可能重复@KillzoneKid,我认为这篇文章在这种情况下对我没有帮助。你说的单列向量是什么意思tor?一个普通的
std::vector
或者像
std::vector
这样的向量向量向量最终只有一行/一列?
>我认为这篇文章在这种情况下对我没有帮助
这正是你想要的,也是你接受的答案,而在你的票证中,你描述了一些不同的@Killz可能的副本一个孩子,我认为这篇文章在这种情况下对我没有帮助。你所说的单列向量是什么意思?一个普通的
std::vector
或者一个像
std::vector
这样的向量向量向量最后只有一行/列?
>我认为这篇文章在这种情况下对我没有帮助
这正是你想要的,也是你接受的答案是,虽然您在票据中描述了一些不同的内容,但我可能弄错了,但我认为OP希望
vec
中的每个项目都有一个
std::vector
。换句话说,
b
的类型是
std::vector
。当我试图打印您的向量b时,我什么也得不到。您的意思是什么?您试图如何打印出that vector?@RSahu你是对的,这不是他在罚单中要求的。他要求你提供的解决方案。因此,我对你的方案投了赞成票。@KillzoneKid,前提是我们总是能用语言表达我们的想法!!我可能错了,但我认为OP希望
vec
中的每个项目都有
std::vector
。换句话说,类型是
>b
std::vector
。当我试图打印你的向量b时,我什么也得不到。你是什么意思?你是如何打印出那个向量的?@RSahu你是对的,这不是他在罚单中要求的。他要求你提供的解决方案。因此,我对你的向量b投了更高的票。@KillzoneKid,前提是我们总是能用文字表达我们的最小值d thinks!!@KillzoneKid,我认为输出是一个向量向量,其中内部向量只包含一项。@KillzoneKid,我认为输出是一个向量向量,其中内部向量只包含一项。当我尝试打印v时,由于某种原因我什么也得不到。当我尝试打印v时,由于某种原因我什么也得不到。单注意:如果您已经在使用
std::cend(b)
,则还应使用
std::cbegin(vec)
std::cend(vec)
@Fureeish您可以。但是您正在阻止算法移动元素。但是您是对的,出于这个目的,
std::cend/std::cbegin
是更好的选择。除非您使用
std::move\u迭代器,否则元素永远不会被移动,是吗?请注意:如果您是