这可能很容易,但是我找不到解决方案。我创建了这样的2D矢量:
vector<vector<int> > matrix;
vector<int> row;
for (int i = 0; i < x;i++) {
row.push_back(i);
}
for (int i = 0; i < x; i++) {
matrix.push_back(row);
}
我遇到的问题是,我现在想根据需要添加行和列,因为随着时间的推移,我可能会用完矩阵空间,但是我不知道该怎么做。这些行很容易,我只需将另一行.push_back返回到矩阵的底端...但是我不知道如何添加另一列。
很抱歉,如果这个问题超级愚蠢,但我还没有编程经验,并且在向2D向量添加列的特定问题上我找不到任何东西。
答案 0 :(得分:2)
在代码中添加的想法是循环遍历矩阵中的每一行,并将新元素推入每个向量。所有这些元素加在一起就是一个新列。
#include <iostream>
#include <vector>
using namespace std;
int main() {
// Initialize a 3x3 matrix
vector<vector<int>> matrix;
vector<int> row;
int x = 3;
for (int i = 0; i < x; i++) {
row.push_back(i);
}
for (int i = 0; i < x; i++) {
matrix.push_back(row);
}
// Add a column; the matrix is now 3x4
int newElement = 3;
for (auto &row : matrix) {
row.push_back(newElement);
}
// Print the matrix
for (auto &row : matrix) {
for (auto &cell : row) {
cout << cell << ' ';
}
cout << endl;
}
return 0;
}
您可能希望将此代码分成多个函数。
答案 1 :(得分:1)
vector
我建议使用一些旨在支持Matrix的库。想到一些:
https://github.com/SophistSolutions/Stroika/blob/V2.1-Release/Library/Sources/Stroika/Foundation/Math/LinearAlgebra/Matrix.h
https://docs.opencv.org/3.4/d3/d63/classcv_1_1Mat.html
http://arma.sourceforge.net/docs.html#part_classes
或者自己编写并直接实现基本功能。
答案 2 :(得分:0)
这是一个简单的函数,它将在矩阵中的指定位置添加一列:
void add_column(std::vector<std::vector<int>>& matrix,
const std::vector<int>& column, std::size_t position)
{
if(matrix.size() < position || position < 0) return; // check for position correctness
std::size_t index = 0;
for(auto& row : matrix){
row.insert(row.begin() + position, column[index++]);
}
}
例如,给定一个矩阵:
std::vector<std::vector<int>> matrix;
并像这样初始化它:
std::vector<int> column;
for (int i = 0; i < 3; i++) {
column.push_back(3);
}
for (int i = 0; i < 3; i++) {
matrix.push_back(column);
}
您以{x {1}} s的3x3矩阵结尾。现在,在第一个和第二个之间添加一列:
3
并打印:
add_column(matrix, std::vector<int>({9, 9, 9}), 1);
您最终得到:
for (auto& row : matrix) {
for (const auto x : row) {
std::cout << x << ' ';
}
std::cout << std::endl;
}