簡體   English   中英

如何在現代C ++中將列附加到2D向量

[英]How to append a column to a 2d vector in modern C++

我正在考慮將列附加到2d向量的現代方法是什么。 我嘗試了以下方法: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()中,該方法可以工作,但可能效率不高。

    任何其他有效的解決方案將不勝感激。 謝謝!

您要求一個有效的解決方案。 但是,從一開始,通過使用朴素的vector<vector<int>>並在要逐列追加時將數據逐行存儲會降低性能。

矩形矩陣最好通過花式索引(例如,使用data.get(i, j)代替data[i][j] )存儲在單個向量中。 如果您按列存儲,那么添加列很簡單:

data.push_back(newCol);

您可以這樣做:

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

這個怎么樣

//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++]);});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM