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

vector и list - C++

Восстановить пароль Регистрация
 
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 10:15     vector и list #1
1) Правильно ли я понимаю, что при расширении вектора все предыдущие указатели портятся?

C++
1
2
3
4
5
vector<int> a;
a.push_back(10);
int *ptr = a[0];
a.push_back(20);
// указатель испортился

2) И не ошибусь ли я, если предположу, что с list такого не бывает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2013, 10:15     vector и list
Посмотрите здесь:

C++ STL vector,list
C++ Разница между list и vector
C++ vector, list, deque
Разница между list и vector? C++
C++ Контейнеры Vector и List (C++)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grindaah
20 / 20 / 0
Регистрация: 25.05.2011
Сообщений: 62
29.01.2013, 10:40     vector и list #2
1. Смотря что называть "расширением". В указанном примере не испортится, т.к. вы не превысите capacity. Кроме того, если вы заранее знаете, количество элементов, с которыми будете работать в векторе и используете reserve(size_t), то реаллокация гарантированно не будет вызвана.

2. Не ошибетесь

ps
C++
1
int *ptr = a[0];
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 10:46  [ТС]     vector и list #3
grindaah,
1) в данном примере capacity изначально 0, потом 1, потом 2. Так что превышение будет

2) Признаю, пропустил '&' по невнимательности

Добавлено через 3 минуты
grindaah, кстати, возможно ли вектор заблокировать на расширение? Что бы при превышении capacity вызывалось исключение
grindaah
20 / 20 / 0
Регистрация: 25.05.2011
Сообщений: 62
29.01.2013, 11:15     vector и list #4
1 Да, я поторопился с ответом, обычно reserve вызывал, забыл уже.

2 ООП к вашим услугам:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <typename T>
class my_vector : public std::vector<T>
{
public:
    my_vector()
    {
        std::vector<T>::reserve(3);
    }
 
    void push_bacK(const T& param)
    {
        if (std::vector<T>::size() >= std::vector<T>::capacity())
            throw param;
        std::vector<T>::push_back(param);
    }
};
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 11:17  [ТС]     vector и list #5
grindaah, да как ручками это сделать я представляю. Интересовало, если ли уже готовые решения в STL.
grindaah
20 / 20 / 0
Регистрация: 25.05.2011
Сообщений: 62
29.01.2013, 11:32     vector и list #6
ответ - нет, вектор такого не предоставляет. хотя я и не совсем понимаю, зачем это может понадобиться. Если не хотите вылезти за рамки, используйте статический массив. (boost::array как вариант)
Yandex
Объявления
29.01.2013, 11:32     vector и list
Ответ Создать тему
Опции темы

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