Форум программистов, компьютерный форум CyberForum.ru

Как узнать размер двумерного вектора? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 14:00     Как узнать размер двумерного вектора? #1
есть квадратная матрица. Для ее хранения создаю динамический массив:
C++
1
2
3
4
5
6
7
8
9
10
double **matrix = new double*[range];
    for (int i = 0; i < range; i++) 
    {
        matrix[i] = new double[range]();
    }
...
// Освобождение памяти
    for ( int i =0; i < range; i++)
    delete[] matrix[i];
    delete[] matrix;
Нужно узнать размер этого массива (не важно - по горизонтали или вертикали, т.к. матрица квадратная)
Но вообще хотелось бы узнать как такие вещи делаются.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2011, 14:00     Как узнать размер двумерного вектора?
Посмотрите здесь:

C++ размер двумерного вектора
Как узнать размер массива? C++
как объявить что размер вектора равен нулю? C++
C++ Как узнать размер массива
Как установить размер вектора не заполняя его элементами? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.07.2011, 14:03     Как узнать размер двумерного вектора? #2
пользователь сам задаёт размер и следит за ним.
range*range ваш размер.
LosAngeles
Заблокирован
28.07.2011, 14:04     Как узнать размер двумерного вектора? #3
ты же знаешь сколько выделил, столько же и удали. Если в функцию передаёшь массив, то передавай и его размер
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2011, 14:53     Как узнать размер двумерного вектора? #4
Для статическог массива mass число элементов можно рассчитать по формуле
C++
1
int n = sizeof(mass)/sizeof(mass[0]);
Для динамики этот алгоритм не применим, для подсчёта числа элементов динамического массива нужно использовать алгоритм
C++
1
2
while(mass + i)
     i++;
т.е условием окнчания цикла будет происходить при доступе к 1-й ячейке памяти которая находится за пределами массива.
Jupiter
28.07.2011, 14:57
  #5

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(mass + i)
i++;
а можно не крутить велосипеды каждый раз пересчитывая эту хрень для матрици hello19 на 4000элементов млин...

Mayonez
 Аватар для Mayonez
379 / 271 / 20
Регистрация: 26.12.2009
Сообщений: 875
28.07.2011, 15:04     Как узнать размер двумерного вектора? #6
C++
1
РАЗМЕР = range;


Добавлено через 1 минуту
Цитата Сообщение от hello19 Посмотреть сообщение
double **matrix = new double*[range];
range где-то же обьявляется или вводится
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 15:48  [ТС]     Как узнать размер двумерного вектора? #7
раньше объявляется
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:20     Как узнать размер двумерного вектора? #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
т.е условием окнчания цикла будет происходить при доступе к 1-й ячейке памяти которая находится за пределами массива.
А как узнать, что ячейка памяти хранится за пределами массива, если размер массива не известен?
о_0
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
28.07.2011, 17:37     Как узнать размер двумерного вектора? #9
2 hello19
раньше объявляется
Ну так и вот как и сказали:
C++
1
размер == range
CAHTEXHUK
Заблокирован
28.07.2011, 19:07     Как узнать размер двумерного вектора? #10
Цитата Сообщение от Deviaphan Посмотреть сообщение
А как узнать, что ячейка памяти хранится за пределами массива, если размер массива не известен?
о_0
очевидно автор хочет SIGSEGV словить, вот так и проверяет
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
28.07.2011, 19:18     Как узнать размер двумерного вектора? #11
Цитата Сообщение от CAHTEXHUK Посмотреть сообщение
очевидно автор хочет SIGSEGV словить, вот так и проверяет
SIGSEGV может наступить заметно позже, чем кончатся элементы массива. Так что способ не точный.
Deviaphan
28.07.2011, 19:23
  #12

Не по теме:

Цитата Сообщение от grizlik78 Посмотреть сообщение
Так что способ не точный.
А давайте обсуждать завершение цикла путём выключения питания?

easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
28.07.2011, 22:07     Как узнать размер двумерного вектора? #13
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
т.е условием окнчания цикла будет...
... переполнение 32(64)битного беззнакового целого.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.07.2011, 06:00     Как узнать размер двумерного вектора? #14
Цитата Сообщение от easybudda Посмотреть сообщение
. переполнение 32(64)битного беззнакового целого.
Не-а! Цикл завершится при некотором числе, при сдвиге на которое mass будет указывать на нулевую ячейку. Т.е. при переполнении указателя.)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.07.2011, 11:41     Как узнать размер двумерного вектора? #15
Цитата Сообщение от Deviaphan Посмотреть сообщение
Т.е. при переполнении указателя
Видимо удивлю, но по сути указатель - как-раз беззнаковое целое.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.07.2011, 11:52     Как узнать размер двумерного вектора? #16
Цитата Сообщение от easybudda Посмотреть сообщение
Видимо удивлю
Не, не удивил. Это две абсолютно разные сущности. То, что они бинарно совместимы, вполне можно считать приятным стечением обстоятельств. И я не уверен, что на всех платформах они совместимы.
Тем более, что ты не уточнил, о каком из беззнаковых целых ты говорил о i или о mass.)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.07.2011, 12:05     Как узнать размер двумерного вектора? #17
Цитата Сообщение от Deviaphan Посмотреть сообщение
Это две абсолютно разные сущности.
А в чём разница?
Цитата Сообщение от Deviaphan Посмотреть сообщение
Тем более, что ты не уточнил, о каком из беззнаковых целых ты говорил о i или о mass.)
Ни о том, ни о другом. Переполнится то целое, в котором оказывается сумма i и m. Это может быть регистр, или безымянная ячейка памяти размером с указатель - не важно.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.07.2011, 12:08     Как узнать размер двумерного вектора? #18
Цитата Сообщение от easybudda Посмотреть сообщение
Переполнится то целое, в котором оказывается сумма i и m
Ой, да. Я её вместо mass имел в виду.)

Цитата Сообщение от easybudda Посмотреть сообщение
А в чём разница?
Число - это число.
Указатель - это указатель на ячейку памяти.
Разве не очевидно?
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.07.2011, 12:16     Как узнать размер двумерного вектора? #19
Цитата Сообщение от Deviaphan Посмотреть сообщение
Указатель - это указатель на ячейку памяти.
Разве не очевидно?
Указатель - это число, обозначающее номер ячейки в памяти...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2011, 12:19     Как узнать размер двумерного вектора?
Еще ссылки по теме:

C++ Как узнать размер массива?
как узнать размер строки? C++
Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.07.2011, 12:19     Как узнать размер двумерного вектора? #20
Цитата Сообщение от easybudda Посмотреть сообщение
Указатель - это число, обозначающее номер ячейки в памяти...
Да не может быть!..
Yandex
Объявления
29.07.2011, 12:19     Как узнать размер двумерного вектора?
Ответ Создать тему
Опции темы

Текущее время: 23:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru