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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 523
Записей в блоге: 1
#1

Узнать размер массива - C++

15.08.2012, 17:04. Просмотров 1778. Ответов 11
Метки нет (Все метки)

есть 2 указателя на первый элемент массива и указатель на элемент после последнего

можно ли как-то узнать размер этого массива не используя цикл
C++
1
2
3
4
while (beg != end) {
count++;
beg++;
}
если массив будет большой будет слишком долго
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2012, 17:04     Узнать размер массива
Посмотрите здесь:

Как узнать размер массива? - C++
Имею функцию template <typename T> int funk(T mas, T element) { //kod }

Как узнать размер массива? - C++
Нужно узнать размер введенного пользователем массива, но sizeof() почему-то не работает, помогите пожалуйста разобраться! int...

Как узнать размер массива - C++
В задаче нужно для решения узнать размер массива. Если sizeof() возвращает кол-во занятой памяти в байтах, и sizeof(char)=2, то ...

Узнать размер динамического массива - C++
Здравствуйте. Пытаюсь сделать динамический массив и вывести его размерность. Выводится размерность = 4, подскажите пожалуйста где я...

Узнать размер массива строк string - C++
Есть массив строк string. Например, {"asd", "qwe", "zxc"} Как узнать его размеры? через .length(), .size(), sizeof(str)/sizeof(str)...

Узнать размер (количество) массива объектов класса - C++
Допустим, у меня есть такой массив объектов: TGameEnemy enemies = { TGameEnemy(), TGameEnemy(), TGameEnemy() }; Мне необходимо...

Как узнать размер массива в динамической памяти? - C++
Добрый вечер еще раз! Напишите пожалуйста как можно узнать истинный размер массива, находящегося в динамической памяти, созданными при...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 17:17     Узнать размер массива #2
C++
1
int size=(end-begin)/(sizeof тип переменной)
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
15.08.2012, 17:18     Узнать размер массива #3
cossack5, Если массив статический
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 523
Записей в блоге: 1
15.08.2012, 17:19  [ТС]     Узнать размер массива #4
в общем у меня класс получает указатели на первый и после последнего элементы массива
в задаче требуется написать оператор сравнения
в теории
1) он проверяет размеры массивов, если не равны сразу возвращает false
2) если размеры равны, проверяет каждый элемент, если встречаются не равные элементы возвращает false

вот класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class CheckedPtr
{
public:
    CheckedPtr(int *b, int *e) : beg(b), end(e), curr(b) {}
 
    CheckedPtr& operator++();
    CheckedPtr& operator--();
    CheckedPtr operator++(int);
    CheckedPtr operator--(int);
 
    int &operator[](const std::size_t);
    const int &operator[](const std::size_t) const;
 
    int& operator*();
    const int& operator*() const;
 
    friend bool operator==(const CheckedPtr&, const CheckedPtr&);
 
private:
    int *beg;
    int *end;
    int *curr;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool operator==(const CheckedPtr &lhs,  const CheckedPtr &rhs)
{
    std::size_t sizelhs(0);
    int *bgl = lhs.beg;
    while (bgl != lhs.end) {
        sizelhs++;
        bgl++;
    }
    std::size_t sizerhs(0);
    int *bgr = rhs.beg;
    while (bgr != rhs.end) {
        sizerhs++;
        bgr++;
    }
    if(sizelhs == sizerhs
        return false;
}
не дописан еще
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 17:23     Узнать размер массива #5
Цитата Сообщение от ForEveR Посмотреть сообщение
cossack5, Если массив статический
Какие проблемы могут быть с динамическим?

Добавлено через 2 минуты
Ах, да, у вас же другой динамический...
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 523
Записей в блоге: 1
15.08.2012, 17:36  [ТС]     Узнать размер массива #6
вот дописал, можно ли что-то заменить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
bool operator==(const CheckedPtr &lhs,  const CheckedPtr &rhs)
{
    std::size_t sizelhs(0);
    int *bgl = lhs.beg;
    while (bgl != lhs.end) {
        ++sizelhs;
        ++bgl;
    }
    bgl = lhs.beg;
    std::size_t sizerhs(0);
    int *bgr = rhs.beg;
    while (bgr != rhs.end) {
        ++sizerhs;
        ++bgr;
    }
    bgr = rhs.beg;
    if(sizelhs != sizerhs) 
        return false;
    else {
        while (bgl != lhs.end || bgr != rhs.end) {
            if (*bgl != *bgr)
                return false;
            else {
                bgl++;
                bgr++;
            }
        }
    }
    return true;
}
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
15.08.2012, 18:38     Узнать размер массива #7
cossack5, Да не, я был не прав. Расстояние между элементами определяется именно так, но все же деление на sizeof(T) лишнее.
Catstail
Модератор
22458 / 10863 / 1769
Регистрация: 12.02.2012
Сообщений: 17,990
15.08.2012, 19:14     Узнать размер массива #8
Цитата Сообщение от ForEveR Посмотреть сообщение
но все же деление на sizeof(T) лишнее.
- не лишнее (если нужен размер не в байтах, а в ячейках соотв. типа)
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 523
Записей в блоге: 1
15.08.2012, 19:22  [ТС]     Узнать размер массива #9
Цитата Сообщение от Catstail Посмотреть сообщение
- не лишнее (если нужен размер не в байтах, а в ячейках соотв. типа)
в любом случае оно выдавало 1 в моей задаче(массивы имели размер 10 и 9 элементов), не знаю, вроде все правильно делал
Catstail
Модератор
22458 / 10863 / 1769
Регистрация: 12.02.2012
Сообщений: 17,990
15.08.2012, 19:33     Узнать размер массива #10
Цитата Сообщение от cossack5 Посмотреть сообщение
int size=(end-begin)/(sizeof тип переменной)
- это давало 1?

Добавлено через 8 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
но все же деление на sizeof(T) лишнее.
- да. Действительно лишнее. При вычитании указателей размер элемента учитывается. Это чтобы определить размер в байтах, нужно умножить на sizeof. Пардон!
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
15.08.2012, 19:35     Узнать размер массива #11
Разность указателей — это разность индексов массива, если это указатели из того же массива. Делить на sizeof не надо. (Пункт 5.7/6 стандарта).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 19:47     Узнать размер массива
Еще ссылки по теме:

Узнать размер файла - C++
Дорогие форумчане! Есть у меня есть файл xxxxx.clk(все данные в нем строчные), он весит n-ое количество мегабайт. Нужно задать массив...

Узнать размер консоли - C++
Как узнать размер консольного окна, куда программа выводит данные? Сколько символов "влазит" по вертикали и горизонтали. ...

Узнать размер файла - C++
Мне нужно прочитать обычный текстовый файл. Я думаю это сделать с помощью одной из функций семейства get(). Для этого (и не только) мне...

Узнать размер строки до её считывания - C++
Возник вопрос связанный с выделением памяти под массив символов. Задача: считать строку в массив символов с выделением динамической...

как узнать размер строки? - C++
есть массив указателей string **str на объекта класс string; как узнать размер строки, записанной, например, в *str?


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

Или воспользуйтесь поиском по форуму:
DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 523
Записей в блоге: 1
15.08.2012, 19:47  [ТС]     Узнать размер массива #12
Цитата Сообщение от Catstail Посмотреть сообщение
- это давало 1?
с делением давало 1, щас переписал без деления все отлично работает
спасибо за помощь
Yandex
Объявления
15.08.2012, 19:47     Узнать размер массива
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru