Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Непонятные функции std::vector - C++

15.05.2013, 19:21. Просмотров 1290. Ответов 39
Метки нет (Все метки)

Здорова господа!
Тут я решил своими словами описать стандартные контейнеры их всего 14. Решил описать с примерчиками возможности каждого контейнера, оно и мне полезно стл как раз изучу, да и мб новичок новичку пригодится, а то на офф сайте фиг, что поймешь, а русских ресурсов мало, поэтому решил свой ресурс создать по стл.
Ну а что там стл маленькая 14 контейнеров и 60 алгоритмов все го то.

Ну ладно в общем щас описываю std::vector и тут у меня возникла проблема никак не пойму, что делают эти методы
capacity(), size() и reserve(). Пытаюсь посмотреть, что выводится:
C++
1
2
3
4
5
6
7
8
9
10
11
        vector<int> vec(30,444);//10 элементов, значение 7
    cout <<"vec.size()= "<<vec.size()<<endl;//30
    cout <<"vec.capacity()= "<<vec.capacity()<<endl;//30
    
        vec.reserve(35);//увеличивает емкость 
    cout <<"vec.size()= "<<vec.size()<<endl;//30
    cout <<"vec.capacity()= "<<vec.capacity()<<endl;//35
 
        vec.reserve(35);//увеличивает емкость 
    cout <<"vec.size()= "<<vec.size()<<endl;//30
    cout <<"vec.capacity()= "<<vec.capacity()<<endl;//35
Что такое capacity() это мощьность, а что за мощьность?
И еще reserve() допустим оно меняет размер этой capacity но оно почему то меняет только в большую сторону.
От если я пытаюсь сделать больше то оно меняет на больше, но когда я делаю меньше оно меньше не делает?

Добавлено через 5 минут
Еще эта функция не понятна shrink_to_fit(), она уменьшает capacity но меньше чем 30 в примере выше не делает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2013, 19:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятные функции std::vector (C++):

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами - C++
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Передача функции указатель на элемент std::vector<std::string> - C++
Доброй ночи тем, кому не спится (или живет в другом часовом поясе:p)! Есть функция, требующая в качестве параметра указатель на...

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию? - C++
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

Вывести значения std::vector<std::vector<int*> > - C++
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3; std::vector&lt;std::vector&lt;int*&gt; &gt; imatrix; //...

Как изменять размер std::vector<std::vector>? - C++
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: std::vector&lt;std::vector&lt;float&gt;&gt; data; ...

std::vector, классы и функции. - C++
Цель сделать вектор класса. Но в классе должен быть вектор. Обращения к элементам выглядит так, а как работать с вектором? #include...

39
0x10
15.05.2013, 19:30
  #2

Не по теме:

Есть дельное предложение: вместо того, чтобы документировать существующее, выбросить нафиг STL и написать ее с нуля, самому. Чтобы пришло настоящее понимание того, как устроены внутри структуры данных. Думается, если подход будет выбран верный, то такие вопросы со временем сами решатся.

Наводящий вопрос: как ты думаешь, что происходит когда ты вызываешь метод push_back?

0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
15.05.2013, 19:33 #3
capacity показывает сколько элементов может содержать вектор в данный момент, то есть возвращается место выделенное под вектор переведенное в элементы
reserve(x) резервирует место так что бы вектор мог содержать, по крайней мере, x элементов. Если x <= capacity(), то ничего не происходит.

shrink_to_fit()
Допустим был вектор vector<int> v(100); //100 целых чисел. capacity() >= 100
Поменяем размер: v.resize(10); //10 целых чисел. capacity() >= 100
v.shrink_to_fit(); //10 целых чисел. capacity() >= 10
1
ninja2
15.05.2013, 19:34  [ТС]
  #4

Не по теме:

0x10, Да нет дружище, твое предложение меня отталкнет далеко назад, а я хо быстрее покончить с стл и начать учить винапи.

0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 832
15.05.2013, 19:35 #5
Но зачем всё это документировать если есть полно ресурсов по С++?
0
metaluga145
15.05.2013, 19:37
  #6

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
начать учить винапи.
зачем учить винапи,если не понимаешь базы?

0
ninja2
15.05.2013, 19:37  [ТС]
  #7

Не по теме:

Цитата Сообщение от 0x10 Посмотреть сообщение
Наводящий вопрос: как ты думаешь, что происходит когда ты вызываешь метод push_back?
Я думаю создается новая ячейка с размером который был раньше только плюс один.

0
metaluga145
15.05.2013, 19:39
  #8

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
Я думаю создается новая ячейка с размером который был раньше только плюс один.
гг. а вот и нет

0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
15.05.2013, 19:44  [ТС] #9
Цитата Сообщение от Olivеr Посмотреть сообщение
Но зачем всё это документировать если есть полно ресурсов по С++?
Мне они не нравятся те, что есть да на английском сplacplac хороший ресурс, но там фиг, что разберешь. А так если хорошо задокументировать, да еще понятным для себя языком, то в будущем с экономится очень много времени.

Времени много тратиться в гугле набрать, а затем ищи на русском, а там бывает выкидывает ссылки не те что тебе нужно.

А так когда сам задокументировал стл изучу на приличном уровне она ж не большая. Да и если, что то призабуду искать долго не придется зашол посмотрел сделал.
Да практика это хорошая

Лучший способ запомнить новый материал - это написать шпаргалку .
0
0x10
2479 / 1652 / 248
Регистрация: 24.11.2012
Сообщений: 4,095
15.05.2013, 19:44 #10
ninja2, наводяший код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v;
    for (int i = 0; i < 1000; ++i)
    {
        v.push_back(i);
        std::cout << v.size() << " " << v.capacity() << std::endl;
    }
    return 0;
}
1
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
15.05.2013, 19:44 #11
метод push_back заказывает память, в двое больше,чем надо. то есть к каписити+1 и к размеру +1
0
0x10
2479 / 1652 / 248
Регистрация: 24.11.2012
Сообщений: 4,095
15.05.2013, 19:45 #12
Цитата Сообщение от ninja2 Посмотреть сообщение
Лучший способ запомнить новый материал
Понимать > Помнить
0
Avazart
Эксперт С++
7247 / 5419 / 297
Регистрация: 10.12.2010
Сообщений: 24,046
Записей в блоге: 17
15.05.2013, 19:59 #13
Цитата Сообщение от ninja2 Посмотреть сообщение
что поймешь, а русских ресурсов мало, поэтому решил свой ресурс создать по стл.
Не надо ляля... книг достаточно ...

Добавлено через 2 минуты
Цитата Сообщение от metaluga145 Посмотреть сообщение
метод push_back заказывает память, в двое больше,чем надо. то есть к каписити+1 и к размеру +1
Кстати тоже не верное тут от реализации зависит, по крайней мере раньше был коэффициент 1.5

Добавлено через 2 минуты
Цитата Сообщение от ninja2 Посмотреть сообщение
Что такое capacity() это мощьность, а что за мощьность?
-Ёмкость.
Реальный размер "внутреннего" массива сидящего в контейнере.
1
0x10
2479 / 1652 / 248
Регистрация: 24.11.2012
Сообщений: 4,095
15.05.2013, 19:59 #14
Цитата Сообщение от Avazart Посмотреть сообщение
Кстати тоже не верное тут от реализации зависит, по крайней мере раньше был коэффициент 1.5
Ну я сейчас прогнал код выше - capacity при необходимости увеличивается в два раза, gcc 4.7.2.
0
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
15.05.2013, 20:02  [ТС] #15
Цитата Сообщение от 0x10 Посмотреть сообщение
Ну я сейчас прогнал код выше - capacity при необходимости увеличивается в два раза, gcc 4.7.2.
а я програл в визуал С++ у меня увеличивается на 50% от существовавшей.
0
15.05.2013, 20:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2013, 20:02
Привет! Вот еще темы с ответами:

Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> - C++
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я ставлю закладку итератора, ...

Нужна реализация функции std::vector::insert() - C++
Нужна реализация функции std::vector::insert() 1)iterator insert (iterator position, const value_type&amp; val); 2) void insert (iterator...

Передать std::vector в качестве аргумента функции - C++
Задание: определить моду чисел из массива. Вот код: #include &lt;iostream&gt; #include &lt;vector&gt; int mod_a(int, vector&lt;int&gt;); using...

Std::vector/QVector в классе или std::vector/QVector классов? - C++
Доброе время суток! Собственно вопрос в самой теме, есть некий класс class WorkJornal { private: string manager; ...


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

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

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