Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
1

vector и list

29.01.2013, 10:15. Показов 1401. Ответов 5
Метки нет (Все метки)

1) Правильно ли я понимаю, что при расширении вектора все предыдущие указатели портятся?

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

2) И не ошибусь ли я, если предположу, что с list такого не бывает?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2013, 10:15
Ответы с готовыми решениями:

Контейнеры Vector,List
Как в массиве списков переместить из первой ячейки все элементы которые делятся на 2 в другую...

Сортировка vector и list
Здравствуйте. vector&lt;int&gt; функцией STL медленнее сортируется, чем list&lt;int&gt; собственным методом. ...

vector, list, deque
Пытаюсь разобраться, куда лучше какой контейнер применять, под какие задачи. Первый вопрос по...

Шаблоны, vector, list
Создать класс Beta таким образом , чтобы при уничтожении последнего объекта на экран выдавалось...

5
20 / 20 / 3
Регистрация: 25.05.2011
Сообщений: 62
29.01.2013, 10:40 2
1. Смотря что называть "расширением". В указанном примере не испортится, т.к. вы не превысите capacity. Кроме того, если вы заранее знаете, количество элементов, с которыми будете работать в векторе и используете reserve(size_t), то реаллокация гарантированно не будет вызвана.

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

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

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

Добавлено через 3 минуты
grindaah, кстати, возможно ли вектор заблокировать на расширение? Что бы при превышении capacity вызывалось исключение
0
20 / 20 / 3
Регистрация: 25.05.2011
Сообщений: 62
29.01.2013, 11:15 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);
    }
};
0
74 / 37 / 3
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 11:17  [ТС] 5
grindaah, да как ручками это сделать я представляю. Интересовало, если ли уже готовые решения в STL.
0
20 / 20 / 3
Регистрация: 25.05.2011
Сообщений: 62
29.01.2013, 11:32 6
ответ - нет, вектор такого не предоставляет. хотя я и не совсем понимаю, зачем это может понадобиться. Если не хотите вылезти за рамки, используйте статический массив. (boost::array как вариант)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2013, 11:32

Помощь в написании контрольных, курсовых и дипломных работ здесь.

STL vector,list
У меня 2 вопроса: 1) можете рассказать,как подробно работает reverse_iterator?Создал вектор,хочу...

Контейнеры Vector и List (C++)
Уважаемые форумчане! Помогите, пожалуйста, реализовать вручную классы Vector и List с основными их...

Vector, list for beginners
Доброго времени суток. Поскольку самоучитель Лафоре не подходит для начинающих (...

Удаление vector, list, string
Привет! Такая задача. В программе я описал класс Class1. Класс содержит поля стандартных типов,...

Разница между list и vector?
Разница между list и vector?

Разница между list и vector
Подскажите пожалуйста в чем различие между листами и векторами? Сколько не пытался не смог найти...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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