Вектора
Для типа T T[size] является типом "вектор из size элементов типа T". Элементы индексируются (нумеруются) от 0 до size-1.
Например:
float v[3]; // вектор из трех float: v[0], v[1], v[2] int a[2][5]; // два вектора из пяти int char* vpc; // вектор из 32 указателей на символ
Цикл для печати целых значений букв нижнего регистра можно было бы написать так:
extern int strlen(char*); char alpha[] = "abcdefghijklmnoprstuvwxyz"; main() { int sz = strlen(alpha); for (int i=0; i.
Функция strlen() использовалась для подсчета числа символов в alpha; вместо этого можно было использовать значение размера alpha ( см. этот пункт). Если применяется набор символов ASCII, то выдача выглядит так:
"a" = 97 = 0141 = 0x61 "b" = 98 = 0142 = 0x62 "c" = 99 = 0143 = 0x63 ...
Заметим, что задавать размер вектора alpha необязательно; компилятор считает число символов в символьной строке, указанной в качестве инициализатора. Использование строки как инициализатора для вектора символов - удобное, но к сожалению и единственное применение строк. Аналогичное этому присваивание строки вектору отсутствует.
Например:
char v[9]; v = "строка"; // ошибка
ошибочно, поскольку присваивание не определено для векторов.
Конечно, для инициализации символьных массивов подходят не только строки. Для остальных типов нужно применять более сложную запись. Эту запись можно использовать и для символьных векторов.
Например:
int v1[] = { 1, 2, 3, 4 }; int v2[] = { "a", "b", "c", "d" };
char v3[] = { 1, 2, 3, 4 }; char v4[] = { "a", "b", "c", "d" };
Заметьте, что v4 - вектор из четырех (а не пяти) символов; он не оканчивается нулем, как того требуют соглашение и библиотечные подпрограммы. Обычно применение такой записи ограничивается статическими объектами.
Многомерные массивы представляются как вектора векторов, и применение записи через запятую, как это делается в некоторых других языках, дает ошибку при компиляции, так как запятая (,) является операцией последования (см. этот пункт). Попробуйте, например, сделать так:
int bad[5,2]; // ошибка
и так:
int v[5][2]; int bad = v[4,1]; // ошибка int good = v[4][1]; // ошибка
Описание char v[2][5]; описывает вектор из двух элементов, каждый из которых является вектором типа char[5]. В следующем примере первый из этих векторов инициализируется первыми пятью буквами, а второй - первыми пятью цифрами.
char v[2][5] = { "a", "b", "c", "d", "e", "0", "1", "2", "3", "4" }
main() { for (int i = 0; i<2; i++) { for (int j = 0; j<5; j++) cout << "v[" << i << "][" << j << "]=" << chr(v[i][j]) << " "; cout << "\n"; } }
это дает в результате
v[0][0]=a v[0][1]=b v[0][2]=c v[0][3]=d v[0][4]=e v[1][0]=0 v[1][1]=1 v[1][2]=2 v[1][3]=3 v[1][4]=4
1 2 3 4 5 6 7 8 9
8 8 8
|