簡體   English   中英

3D矢量與2個未知的大小和1已知的大小

[英]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嗎?

是的你應該。

當標准庫為您提供功能時,為內存分配和釋放編寫自己的代碼沒有任何好處。

無論選擇哪一個,我都在努力使它成功,我該如何創建和初始化它?

假設您已經找到了如何從命令行獲取MN ,您可以使用:

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.

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