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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
15.08.2012, 17:04     Узнать размер массива #1
есть 2 указателя на первый элемент массива и указатель на элемент после последнего

можно ли как-то узнать размер этого массива не используя цикл
C++
1
2
3
4
while (beg != end) {
count++;
beg++;
}
если массив будет большой будет слишком долго
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 17:17     Узнать размер массива #2
C++
1
int size=(end-begin)/(sizeof тип переменной)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.08.2012, 17:18     Узнать размер массива #3
cossack5, Если массив статический
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 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
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.08.2012, 18:38     Узнать размер массива #7
cossack5, Да не, я был не прав. Расстояние между элементами определяется именно так, но все же деление на sizeof(T) лишнее.
Catstail
Модератор
 Аватар для Catstail
21501 / 10254 / 1670
Регистрация: 12.02.2012
Сообщений: 17,139
15.08.2012, 19:14     Узнать размер массива #8
Цитата Сообщение от ForEveR Посмотреть сообщение
но все же деление на sizeof(T) лишнее.
- не лишнее (если нужен размер не в байтах, а в ячейках соотв. типа)
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
15.08.2012, 19:22  [ТС]     Узнать размер массива #9
Цитата Сообщение от Catstail Посмотреть сообщение
- не лишнее (если нужен размер не в байтах, а в ячейках соотв. типа)
в любом случае оно выдавало 1 в моей задаче(массивы имели размер 10 и 9 элементов), не знаю, вроде все правильно делал
Catstail
Модератор
 Аватар для Catstail
21501 / 10254 / 1670
Регистрация: 12.02.2012
Сообщений: 17,139
15.08.2012, 19:33     Узнать размер массива #10
Цитата Сообщение от cossack5 Посмотреть сообщение
int size=(end-begin)/(sizeof тип переменной)
- это давало 1?

Добавлено через 8 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
но все же деление на sizeof(T) лишнее.
- да. Действительно лишнее. При вычитании указателей размер элемента учитывается. Это чтобы определить размер в байтах, нужно умножить на sizeof. Пардон!
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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++ Как узнать размер массива в динамической памяти?
C++ Как узнать размер массива
C++ Как узнать размер массива?

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

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

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