Если ваш проект CLI (Common Language Runtime Support), то:
Вы можете использовать класс массива, а не тот, который вы получаете при написании:
#include <array>
using namespace std;
Другими словами, не неуправляемый класс массива, который вы получаете при использовании пространства имен std и при включении заголовка массива, а не неуправляемого класса массива, определенного в пространстве имен std и в заголовке массива, а в массиве управляемого класса CLI.
с этим классом, вы можете создать массив любого ранга, который вы хотите.
Следующий код ниже создает новый двухмерный массив из 2 строк и 3 столбца и типа int, и я называю it "arr":
array<int, 2>^ arr = gcnew array<int, 2>(2, 3);
Теперь вы можете получить доступ к элементам в массиве, по имени и написать только квадратные скобки []
, а внутри них добавить строку и столбец и отделить их с запятой ,
.
Следующий код ниже относится к элементу во второй строке и первом столбце массива, который я уже создал в предыдущем коде выше:
arr[0, 1]
только для записи эта строка должна прочитать значение в этой ячейке, т. е. получить значение в этой ячейке, но если вы добавите знак =
, вы собираетесь записать значение в этой ячейке, то есть установить значение в этой ячейке. Вы также можете использовать операторы + =, - =, * = и / =, только для чисел (int, float, double, __int16, __int32, __int64 и т. Д.), Но вы уже знаете это.
Если ваш проект не CLI, вы можете использовать неуправляемый класс массива пространства имен std, если вы #include <array>
, конечно, но проблема в том, что этот класс массива отличается от массива CLI. Создать массив такого типа аналогичен CLI, за исключением того, что вам придется удалить знак ^
и gcnew
. Но, к сожалению, второй параметр int в скобках <>
указывает длину (т. Е. Размер) массива, а не его ранг!
Невозможно указать ранг в этом типе массива, ранг - это CLI массив.
std array ведет себя как обычный массив в c ++, который вы определяете с помощью указателя, например int*
, а затем: new int[size]
или без указателя: int arr[size]
, но в отличие от Обычный массив c ++, std array предоставляет функции, которые вы можете использовать с элементами массива, такие как fill, begin, end, size и т. д., но обычный массив ничего не предоставляет.
Но все же 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
. Вы можете определить свой собственный двухмерный массив generic class и определить конструктор класса двумерных массивов для получения двух целых чисел, чтобы указать количество строк и столбцов в новом двухмерном массиве и определить функцию get, которая получает два параметра целого числа, которые обращаются к элементу в двумерном массив и возвращает его значение, и задайте функцию, которая получает три параметра, две первые являются целыми числами, которые определяют строку и столбец в двумерном массиве, а третий параметр - новое значение элемента. Его тип зависит от типа, который вы выбрали в родовом классе.
Вы сможете реализовать все это, используя либо обычный массив c ++ (указатели или без), либо массив std и используйте одну из идей что другие люди предложили и упростили использование, как массив cli, или как двухмерный массив, который вы можете определить, назначить и использовать в C #.
Первая часть Вашего вопроса может быть решена только с HTML & CSS; необходимо будет использовать JavaScript для второй части.
я не уверен, под чем Вы подразумеваете "рядом с": на той же строке и рядом, или на отдельных строках? Если Вы хотите все переключатели на той же строке, просто используйте поля для продвижения их независимо. Если Вы хотите каждого из них на их собственной строке, у Вас есть две опции (если Вы не хотите рисковать в float:
территория):
<br />s
для разделения опций независимо и некоторого CSS для вертикального выравнивания их: <style type='text/css'>
.input input
{
width: 20px;
}
</style>
<div class="input radio">
<fieldset>
<legend>What color is the sky?</legend>
<input type="hidden" name="data[Submit][question]" value="" id="SubmitQuestion" />
<input type="radio" name="data[Submit][question]" id="SubmitQuestion1" value="1" />
<label for="SubmitQuestion1">A strange radient green.</label>
<br />
<input type="radio" name="data[Submit][question]" id="SubmitQuestion2" value="2" />
<label for="SubmitQuestion2">A dark gloomy orange</label>
<br />
<input type="radio" name="data[Submit][question]" id="SubmitQuestion3" value="3" />
<label for="SubmitQuestion3">A perfect glittering blue</label>
</fieldset>
</div>
, Разрабатывающий эти <label>
, - то, почему необходимо будет обратиться к JavaScript. Библиотека как jQuery идеально подходит для этого:
<style type='text/css'>
.input label.focused
{
background-color: #EEEEEE;
font-style: italic;
}
</style>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript'>
$(document).ready(function() {
$('.input :radio').focus(updateSelectedStyle);
$('.input :radio').blur(updateSelectedStyle);
$('.input :radio').change(updateSelectedStyle);
})
function updateSelectedStyle() {
$('.input :radio').removeClass('focused').next().removeClass('focused');
$('.input :radio:checked').addClass('focused').next().addClass('focused');
}
</script>
focus
и blur
рычаги необходимы для создания этой работы в IE.
Для любого CSS3-поддерживающего браузера можно использовать , смежный одноуровневый селектор для моделирования Вашего маркирует
input:checked + label {
color: white;
}
MDN's , таблица совместимости браузера говорит по существу, что все текущие, популярные браузеры (Chrome, IE, Firefox, Safari), и на настольном и на мобильном, совместимы.
Это получит Ваши кнопки и маркировки друг рядом с другом, по крайней мере. Я полагаю, что вторая часть не может быть сделана в одной только CSS и будет нуждаться в JavaScript. Я нашел страницу, которая могла бы помочь Вам с той частью также, но у меня нет времени прямо сейчас для испытания ее: http://www.webmasterworld.com/forum83/6942.htm
<style type="text/css">
.input input {
float: left;
}
.input label {
margin: 5px;
}
</style>
<div class="input radio">
<fieldset>
<legend>What color is the sky?</legend>
<input type="hidden" name="data[Submit][question]" value="" id="SubmitQuestion" />
<input type="radio" name="data[Submit][question]" id="SubmitQuestion1" value="1" />
<label for="SubmitQuestion1">A strange radient green.</label>
<input type="radio" name="data[Submit][question]" id="SubmitQuestion2" value="2" />
<label for="SubmitQuestion2">A dark gloomy orange</label>
<input type="radio" name="data[Submit][question]" id="SubmitQuestion3" value="3" />
<label for="SubmitQuestion3">A perfect glittering blue</label>
</fieldset>
</div>