Если ваш проект CLI (Common Language Runtime Support) , то:
Вы можете использовать класс массива, а не тот, который вы получаете, когда пишете:
#include <array>
using namespace std;
Другими словами, не класс неуправляемых массивов, который вы получаете при использовании пространства имен std и при включении заголовка массива, не класс неуправляемых массивов, определенный в пространстве имен std и в заголовке массива, но массив управляемых классов CLI .
с помощью этого класса вы можете создать массив любого ранга , который вы хотите.
Следующий код ниже создает новый двумерный массив из 2 строк и 3 столбцов типа int, и я называю его "arr":
array<int, 2>^ arr = gcnew array<int, 2>(2, 3);
Теперь вы можете получить доступ к элементам в массиве, назвав его и записав только одну квадратную скобку []
, а внутри них добавьте строку и столбец и разделите их запятой ,
.
Следующий код ниже обращается к элементу во 2-й строке и 1-м столбце массива, который я уже создал в предыдущем коде выше:
arr[0, 1]
запись только этой строки означает чтение значения в этой ячейке, т.е. получение значения в этой ячейке, но если вы добавите знак равенства =
, вы собираетесь записать значение в этой ячейке, т.е. установить значение в этой камере.
Вы также можете использовать операторы + =, - =, * = и / =, конечно, только для чисел (int, float, double, __int16, __int32, __int64 и т. Д.), Но вы уже знаете это.
Если ваш проект не CLI, то вы можете использовать класс неуправляемых массивов пространства имен std, если, конечно, #include <array>
, но проблема в том, что этот класс массивов отличается от CLI массив. Создать массив этого типа так же, как CLI, за исключением того, что вам придется удалить знак ^
и ключевое слово gcnew
. Но, к сожалению, второй параметр int в скобках <>
указывает длину (т.е. размер) массива, не его ранг!
Нет возможности указать ранг в массиве такого типа, ранг - это функция массива CLI . .
массив std ведет себя как обычный массив в c ++, который вы определяете с помощью указателя, например int*
, а затем: new int[size]
или без указателя: int arr[size]
, но в отличие от обычного массива c ++, массив std обеспечивает функции, которые вы можете использовать с элементами массива, такими как заполнение, начало, конец, размер и т. д., но обычный массив не предоставляет ничего .
Но все же массив std - это одномерный массив, как и обычные массивы c ++.
Но благодаря решениям, которые предлагают другие ребята, о том, как сделать обычный одномерный массив c ++ для двумерного массива, мы можем адаптировать те же идеи к массиву std, например, согласно идее Мехрдада Афшари, мы можем написать следующий код:
array<array<int, 3>, 2> array2d = array<array<int, 3>, 2>();
Эта строка кода создает "массив" , который является одномерным массивом, который каждая из его ячеек представляет или указывает на другой одномерный массив.
Если все одномерные массивы в одномерном массиве равны по длине / размеру, то вы можете рассматривать переменную array2d как реальный двумерный массив, плюс вы можете использовать специальные методы для обработки строк или столбцов, в зависимости от того, как вы видите это в 2D-массиве, который поддерживает массив std.
Вы также можете использовать решение Кевина Лони:
int *ary = new int[sizeX*sizeY];
// ary[i][j] is then rewritten as
ary[i*sizeY+j]
но если вы используете массив std, код должен выглядеть иначе:
array<int, sizeX*sizeY> ary = array<int, sizeX*sizeY>();
ary.at(i*sizeY+j);
И все же есть уникальные функции массива std.
Обратите внимание, что вы по-прежнему можете обращаться к элементам массива std с помощью скобок []
, и вам не нужно вызывать функцию at
.
Вы также можете определить и назначить новую переменную int, которая будет вычислять и хранить общее количество элементов в массиве std и использовать его значение вместо повторения sizeX*sizeY
Вы можете определить свой собственный универсальный класс двумерного массива и определить конструктор класса двумерного массива для получения двух целых чисел, чтобы указать количество строк и столбцов в новом двумерном массиве, а также определить функцию get, которая получает два целочисленные параметры, которые обращаются к элементу в двумерном массиве и возвращают его значение, и устанавливают функцию, которая получает три параметра, первые два являются целыми числами, которые определяют строку и столбец в двумерном массиве, а третий параметр является новым значение элемента. Его тип зависит от типа, выбранного вами в универсальном классе.
Вы сможете реализовать все это с помощью либо обычного массива c ++ (с указателями или без него) или массива std и использовать одну из идей, предложенных другими людьми, и сделать его простым в использовании, как массив cli, или как двумерный массив, который вы можете определять, назначать и использовать в C #.