[英]3D vector with 2 unknown sizes and 1 known size
我的程序接收2維作為命令行參數(M表示寬度,N表示高度)。 只要M和N介於[3-10000]之間,我就必須處理任何尺寸。
我想計算矩陣中的值(由3D矢量表示),但我想保留先前的值來計算新值(這就是為什么一個維度只有2個深度:0 =舊,1 =新)。
這將給我一個像matrix[M][N][2]
或matrix[2][M][N]
。 我沒有偏好(無論哪個更簡單,可能是后者)。
由於M和N只在運行時才知道,所以我不能使用簡單的數組(我可以使用雙*** arr,但我不想搞亂內存分配)
我應該為3個維度中的每個維度使用向量,還是僅為那些未知的維度使用向量? 換句話說,我應該使用一個簡單的數組用於0 = old,1 = new和M和N的向量?
無論選擇哪一個,我都在努力讓它發揮作用。 如何創建和初始化它?
我應該為3個維度中的每個維度使用
vector
嗎?
是的你應該。
當標准庫為您提供功能時,為內存分配和釋放編寫自己的代碼沒有任何好處。
無論選擇哪一個,我都在努力使它成功,我該如何創建和初始化它?
假設您已經找到了如何從命令行獲取M
和N
,您可以使用:
std::vector<int> d1(N, 0);
std::vector<std::vector<int>> d2(M, d1);
std::vector<std::vector<std::vector<int>>> matrix(2, d2);
您也可以將它組合成一行:
std::vector<std::vector<std::vector<int>>> matrix(2, std::vector<std::vector<int>>(M, std::vector<int>(N, 0)));
我更喜歡第一種方法。 遵循正在做的事情更容易。
如果你只使用兩個矩陣我會使用長度為2的數組:
std::array<std::vector<std::vector<int>>, 2 > matrices{ {
std::vector<std::vector<int>>(M, std::vector<int>(N, 0)),
std::vector<std::vector<int>>(M, std::vector<int>(N, 0))
} };
用法:
int a=matrices[0][M][N];
雖然我認為你的程序會受益於某些類型的別名。 這是一個完整的例子:
#include <vector>
#include <array>
#include <iostream>
template<class T>
using Row = std::vector < T > ;
template<class T>
using Matrix = std::vector < Row<T> > ;
std::array<Matrix<int>, 2 > matrices;
int main()
{
size_t M, N;
int d;
std::cin >> M;
std::cin >> N;
std::cin >> default;
matrices.fill(Matrix<int>(M, Row<int>(N,d)));
for (auto& r : matrices[0]){
for (auto& e : r) {
std::cout << e << " ";
}
std::cout << std::endl;
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.