Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Метод Золотого сечения. Пассивный поиск https://www.cyberforum.ru/ cpp-beginners/ thread1301711.html
Нужно написать программу Описание на картинке. Выручайте! Спасибо заранее кто поможет сделать. изображение :) +
C++ Сгенерировать заданную последовательность
последовательность 1 1 1 2 1 1 2 1 1 1 1 1 2 2 1 3 1 2 2 1 1 вводим число с клавиатуры которое будет обозначать количество строк, пример: введем число 3 значит выводится на экран: 1 Желательно с объяснением.Объяснения желательны от вас. Каков закон генерации строк? Добавлено через 2 минуты А если вы его не сможете сформулировать, то чего вы ждете от нас? Игра в "угадайку"?...
C++ Преобразование матриц, двумерный массив https://www.cyberforum.ru/ cpp-beginners/ thread1301722.html
Объясните мне пожалуйста что я не так делаю, или же напишите как можно решить это задание... //Help me please. Нужно построить матрицу В такого же размера, как А, элементы которой обладают...
C++ Как сделать шаблон на считывание неизвестного типа данных? https://www.cyberforum.ru/ cpp-beginners/ thread1301745.html
Есть размерности двумерного массива. Нужно считать с клавиатуры числа. Они могут быть как int, так и float или double. Как это сделать? template <class T> void create_array(int col, int row){... А как тут компилятор определит тип T ? template <class T> void create_array(int col, int row) // при таком вызове create_array(col, row); уж если так писать то при вызове нужно в угловых...
C++ Полиморфизм. Как в предке объявить статический массив, который можно будет использовать в наследниках? https://www.cyberforum.ru/ cpp-beginners/ thread1301718.html
Всем привет. Мне необходимо в классе предке объявить статический массив который можно будет использовать в наследниках. Не очень хочется делать метод get, в предке, через которые можно будет достать... Есть ли другие способы?? Да. Можно получить доступ к членам базового класса напрямую. http://rextester.com/TVXY3361 #include <iostream> struct base {
C++ Двусвязные списки, удалить каждый второй элемент Задание. Написать программу создания двусвязного замкнутого списка (указатель на следующий элемент в последнем узле списка должен указывать на первый элемент, а указатель на предыдущий элемент... f = fopen("t.dat", "r"); fscanf(f, "%d", &nz); нет проверки на то что файл удалось откыть https://www.cyberforum.ru/ cpp-beginners/ thread1301725.html
C++ Определить суммарное значение максимального и минимального элементов https://www.cyberforum.ru/ cpp-beginners/ thread1301772.html
Определить суммарное значение максимального и минимального элементов двумерного массива Как ето реализовать ?? Находишь минимальный и максимальный элементы и возвращаешь их сумму. int sum(int array, int size) { int i; int indexMin = 0; int indexMax = 0; for ( i = 0; i < size; i++ ) { if ( array...
C++ Структура "Студент", найти студентов с оценкой 4 и 5
Надо выявить студентов с оцекной 4 и 5 #include<stdio.h> #include<string.h> #include<conio.h> struct group scanf("&d",ocenka); вы пытаетесь ввести число, хотя переменная объявлена как массив символов
C++ Рекурсия: факториал числа
#include <iostream> using namespace std; int factorial(int n); int main() { cout << "at main" << endl; cout << factorial(5) << endl; Очень подробно, поэтапно если можно) Вот во что выливается роспись рекурсивной функции: https://www.cyberforum.ru/cpp-beginners/thread672743.html#post3569430
C++ Решение СЛАУ с разложением Халецкого
Всем доброго вечера. Пишу метод халецкого на С++. Ну почему-то ответ выводит неверный... Вот код: // транспонирование матрици double** transp(double** A, int n) { double** b; b = new...
C++ Проверить, есть ли в матрице A строка, равная какому-либо из столбцов матрицы B Даны натуральные числа n, m и два двумерных массива A (n,m) и B(m,n). Составьте программу, которая определяет, есть ли в матрице A строка, равная какому-либо из столбцов матрицы B. Выдать... https://www.cyberforum.ru/ cpp-beginners/ thread1301747.html Большое время перерисовки OpenGL C++
Здравствуйте, я студент 2 курса, учусь на программиста, решил начать писать какую ни будь простенькую изометрическую игрушку, и наткнулся на проблему. Я испробовал разные методы, для начала массивы... https://www.cyberforum.ru/opengl/
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12866 / 6731 / 1809
Регистрация: 18.10.2014
Сообщений: 17,036
16.11.2014, 04:32 0

Передача двумерного массива в функцию. Ошибка "invalid types for array subscript" - C++ - Ответ 6856142

16.11.2014, 04:32. Показов 8086. Ответов 10
Метки (Все метки)

Лучший ответ Сообщение было отмечено mersinvald как решение

Решение

Цитата Сообщение от mersinvald Посмотреть сообщение
А как правильно объявлять динамические массивы?
Как создать двумерный массив неконстантного размера в С++

Существует несколько способов. Рассмотрим их на примере двумерного массива 'array' размера N x M с элементами типа 'int'. При этом ни N, ни M не являются константами времени компиляции.

1. Простейший способ: вектор векторов

C++ Скопировано
1
vector<vector<int>> array(N, vector<int>(M));
В результате будет определен вектор векторов, представляющий двумерный массив N x M, заполненный изначально нулями.

Синтаксис доступа - привычный 'array[i][j]'.

Передача в функции - как 'vector<vector<int>> &'

C++ Скопировано
1
2
3
4
5
6
void swapel(vector<vector<int>> &array)
{
  int N = array.size();
  int M = array[0].size();
  swap(array[0][0], array[N - 1][M - 1]);
}
В этом случае размеры массива в функцию передавать не надо, так как вектор уже хранит свой размер внутри себя.

2. Моделирование двумерного массива через одномерный с пересчетом индексов

C++ Скопировано
1
int *array = new int[N * M]();
Это создаст одномерный массив размера N*M, заполненный нулями.

Чтобы доступиться к элементу по двумерному индексу [i][j] просто выполняем пересчет индексов по формуле 'i * M + j', т.е. доступаемся к элементу 'array[i * M + j]'. (На самом деле именно так работают встроенный тип "массив" в языках С и С++ для любой размерности массива.)

Передача в функцию - очевидным образом

C++ Скопировано
1
2
3
4
5
void swapel(int *array, int N, int M)
{
  swap(array[0], array[(N - 1) * M + (M - 1)]);
  // или просто swap(array[0], array[N * M - 1]);
}
Освобождение памяти

C++ Скопировано
1
delete[] array;
Понятно, что в этом способе вместо голого массива можно использовать 'std::vector'.

3а. "Рваный" массив с индивидуальным выделением памяти

C++ Скопировано
1
2
3
int **array = new int*[N];
for (int i = 0; i < N; ++i)
  array[i] = new int[M]();
Синтаксис доступа - привычный 'array[i][j]'.

Передача в функции

C++ Скопировано
1
2
3
4
void swapel(int **array, int N, int M)
{
  swap(array[0][0], array[N - 1][M - 1]);
}
Освобождение памяти

C++ Скопировано
1
2
3
4
for (int i = 0; i < N; ++i)
  delete[] array[i];
 
delete[] array;
Несложно догадаться, что этот способ - это практически то же самое, что и способ 1, только с голыми массивами вместо векторов.

3б. "Рваный" массив с общим выделением памяти

C++ Скопировано
1
2
3
4
int **array = new int*[N];
int *data = new int[N * M]();
for (int i = 0; i < N; ++i, data += M)
  array[i] = data;
Синтаксис доступа и передача в функции - как и в предыдущем способе.

Освобождение памяти

C++ Скопировано
1
2
delete[] array[0];
delete[] array;
Если внимательно посмотреть на способ 2 и способ 3б, то можно заметить, что они очень похожи. В обоих случаях сами данные хранятся в одномерном массиве размера N*M. Разница только в том, что в способе 2 вычисление финального индекса делается через полную формулу, а в способе 3б это вычисление частично уже выполнено для начала каждой строки двумерного массива и указатели на эти начала сохранены в дополнительном массиве указателей.

Добавлено через 11 минут
Цитата Сообщение от mersinvald Посмотреть сообщение
А как правильно объявнять динамические массивы?
Разумеется, вышеприведенные разглагольствования на тему динамических массивов вам нужны только в том случае, если вам действительно нужен массив неконстантного размера в программе. Т.е. если величина 'Size', например, вводится пользователем или читается из файла, т.е. заранее не известна.

Если же величина 'Size' жестко задана на стадии компиляции, то все эти усилия становятся ненужными. Просто объявите ее глобально как

C++ Скопировано
1
const int Size=4;
и смело пользуйтесь обычными встроенными массивами размера 'Size'.

Вернуться к обсуждению:
Передача двумерного массива в функцию. Ошибка "invalid types for array subscript" C++
8
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.11.2014, 04:32
Готовые ответы и решения:

Ошибка error: invalid types 'int[int]' for array subscript
Дана строка,содержащая английский текст.Найти количество слов,начинающихся с буквы b. Выдает ошибку в 29 строке:error: invalid types...

Ошибка компиляции invalid types ‘int[int]’ for array subscript
Вот сам код. Не понимаю в чем может быть ошибка. #include &lt;iostream&gt; using namespace std; int main() { int N, M; ...

Ошибка: error: invalid types ‘int[int]’ for array subscript
Выпрыгивает ошибка: &quot;main.cpp: In function ‘int main()’: main.cpp:33:12: error: invalid types ‘int’ for array subscript if (a...

10
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2014, 04:32
Помогаю со студенческими работами здесь

Ошибка в структуре: Invalid types `int[int]' for array subscript
Ошибка при работе со структурой:607 D:\Ø\ïðàêòèêà\8\lpr81111.cpp invalid types `int' for array subscript #include &lt;cstdlib&gt; ...

invalid types ‘double[int]’ for array subscript
Что компилятор от меня хочет? :cry: /mpi/5laba/main.cpp||In function ‘int main(int, char**)’:| /mpi/5laba/main.cpp|19|error: invalid...

Invalid types 'float[int]' for array subscript
Ошибка в строках cin&gt;&gt;x; p2*=x; p2*=x; invalid types 'float' for array subscript,как исправить? #include &lt;iostream&gt; #include...

Invalid types 'float[int]' for array subscript
Выдает ошибку invalid types 'float' for array subscript в 44 и 48 строке. Не пойму что не так. Подскажите пожалуйста #include...

Invalid types `float[int]' for array subscript
вот такой код, вроде всё написал правильно, но компилятор ругается на 19 строку, мол &quot;Invalid types `float' for array subscript&quot;....

0
Новые блоги и статьи
std::span в C++: Подпредставлени­я и срезы
NullReferenced 18.03.2025
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто. . .
std::span в C++: Доступ к элементам и итерирование
NullReferenced 18.03.2025
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз. . .
Утечки памяти в C#
UnmanagedCoder 18.03.2025
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в. . .
std::span в C++: Введение в невладеющее представление
NullReferenced 18.03.2025
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных. std::span — это легковесный. . .
Введение в Dapr для разработчиков .NET
UnmanagedCoder 18.03.2025
Разработка распределенных систем никогда не была настолько востребованной и одновременно такой сложной. Если вы . NET разработчик, то наверняка сталкивались с необходимостью жонглировать обнаружением. . .
Собеседование по Spring Boot: продвинутые вопросы и ответы
Javaican 18.03.2025
Собеседования на позиции старших разработчиков и архитекторов требуют глубокого понимания внутренних механизмов Spring Boot, нюансов конфигурирования, подходов к оптимизации и построению сложных. . .
Перечисления в TypeScript: использование и лучшие практики
run.dev 18.03.2025
Пишете код и устали от разбросанных по проекту "волшебных" строк и чисел? Знакомая ситуация: где-то в глубине кода притаилась строка "ADMIN", а в другом месте используется "admin". И вот уже. . .
Фишки Kotlin, которые все любят
Javaican 18.03.2025
Помню, как скептически относился к появлению "ещё одного языка для JVM" — мол, зачем нам что-то новое, когда есть Java? Но первый же проект на Kotlin заставил меня пересмотреть свое мнение. Код стал. . .
Списки и кортежи в Python: различия, особенности, применение
py-thonny 18.03.2025
Если вы когда-нибудь писали код на Python, то наверняка сталкивались с конструкциями вида или ('имя', 25, 'инженер'). Это и есть списки и кортежи — последовательности, хранящие упорядоченные наборы. . .
Интеграция JavaScript в Haskell
golander 18.03.2025
Ключевая особенность нового JS-бэкенда GHC — возможность создавать колбэки из JavaScript в Haskell-код. Это открывает дорогу разработке полноценных браузерных приложений, позволяя реагировать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер