Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2011, 15:28   #1
ilia.sk8
 
Регистрация: 21.08.2010
Сообщений: 7
По умолчанию Как работает вектор?

Вопрос в том, массив это или список? То есть, если это массив, то как работает push_back за О(1)? А если это список, то получается, что у вектора нету произвольного доступа, то есть v[100] должен работать за 100*С(с=const) операций(а v[10000] за 10000*С). Так что же такое вектор?
ilia.sk8 вне форума Ответить с цитированием
Старый 31.01.2011, 15:49   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

массив это. т.е все элементы располагаются в одном непрерывном блоке памяти. если блока не хватает, память перераспределяется. работает он не за O(1), а точнее за амортизированное O(1). при вставке N элементов на самом деле выделяется память для 2*N элементов, чтобы постоянно не вызывать realloc при добавлении новых элементов. иначе время было бы O(n).
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 31.01.2011, 16:41   #3
ilia.sk8
 
Регистрация: 21.08.2010
Сообщений: 7
По умолчанию

то есть вектор занимает в 2 раза больше памяти, чем массив "такого же размер"?
ilia.sk8 вне форума Ответить с цитированием
Старый 31.01.2011, 17:08   #4
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Код:
#include <iostream>
#include <vector>

#define MAX 15
using std::vector;
using std::cout;
using std::endl;

int _tmain(int argc, _TCHAR* argv[])
{

	vector<int> v;

	for ( int i = 0; i < MAX; ++i )
	{
		v.push_back(i);
		cout << i << ": " << v.capacity( ) << endl;
	}
	
	return 0;
}
помедитируй сам
coinkrsk вне форума Ответить с цитированием
Старый 31.01.2011, 17:38   #5
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Реализация может быть разной. Но всегда память непрерывна.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 31.01.2011, 17:58   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

ну вообще я читал в офф стл доке, что увеличение вектора при нехватке памяти всегда квадратичное. в студийном компиляторе оно по всей видимости логарифмичное
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 31.01.2011, 18:13   #7
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

У меня в системе тоже квадратичное. Но стандартом не установлено.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
умножение матрицы на вектор на Delphi (неверно работает) adm2010 Помощь студентам 1 29.01.2011 01:43
вектор как закрытый член класса, как изменять его значения? Zhigool' Общие вопросы C/C++ 3 08.08.2010 23:19
Как объявить глобальный/публичный вектор huzik Общие вопросы C/C++ 1 13.11.2009 23:02
Как работает?! KamBall Общие вопросы C/C++ 2 01.06.2009 19:23
Объясните пожалуйста как можно считать значения в этом файле в вектор, 4 -ую матрицу, 6-ую матрицу ciaonataha Помощь студентам 1 30.03.2009 20:57