如何在现代C ++中将列附加到2d向量

时间:2018-04-25 02:10:30

标签: c++

我正在考虑将列附加到二维矢量的现代方法是什么。 我尝试了以下方法: 1.朴素的方式:

void insert_col(vector<vector<int>>& data, vector<int>& newCol){
    if(newCol.size()!=data.size()){
        return ;
    }
    for(int i = 0; i < data.size(); i++){
        data[i].push_back(newCol[i]);
    }
}

第二次尝试不起作用:

transform(data.begin(), data.end(), newCol.begin(), /*not sure about this part*/, [](vector<int>& row, int colVale)->int{return colVale;});

这个想法是使用transform来迭代2d向量和要插入的列。我想知道是否有办法在每一行的末尾追加?

  1. 第三次尝试:

    将每一行重新插入到data.begin()中,这可行但可能效率不高。

    任何其他有效的解决方案都将受到高度赞赏。谢谢!

3 个答案:

答案 0 :(得分:2)

您要求有效的解决方案。但是,从一开始就使用一个天真的vector<vector<int>>并且当你想要按列追加时按行存储数据时,你已经陷入困境。

矩形矩阵最好存储在具有花式索引的单个向量中(例如data.get(i, j)而不是data[i][j])。如果按列存储,则追加列就像:

data.push_back(newCol);

答案 1 :(得分:0)

你可以这样做:

void insert_col(vector<vector<int>>& data, vector<int>& newCol) {
    data.push_back(newCol);
}

答案 2 :(得分:0)

这个怎么样

//For each vector<int> in the 2d vector, 
//push_back the corresponding element from the newCol vector
for_each(data.begin(), data.end(), [&i, &newCol](vector<int>& v){v.push_back(newCol[i++]);});