Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: std::vector и массивы C  (Прочитано 14732 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anchorite
Гость
« : 02-04-2006 18:13 » 

В книге  "Эффективное использование STL" Скотта Мейерса в совете 16 прочел:

Цитата
В соответствии со Стандартом С++ элементы vector должны храниться в памяти непрерывно, по аналогии с массивом.

Никто не знает номер этого пункта в Стандарте где это написано или из которого это следует.
Что-то у меня не получилось найти Жаль
Записан
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #1 : 02-04-2006 18:52 » 

Вообще, если ты просто используешь vector, то тебя не должно заботить каким образом он организован в памяти. Реализация может быть разной. Доступ обеспечивается через итератор, который может указывать на совершенно различные области памяти. Я считаю, что в этом как раз плюс вектора.
Массив же удобнее использовать непрерывный, но иногда может понадобиться разбить его на части..
Кстати, vector ИМХО не должен быть прописан в стандарте языка, поскольку std - это самостоятельная библиотека.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 02-04-2006 19:51 » 

Никто не знает номер этого пункта в Стандарте где это написано или из которого это следует.
Что-то у меня не получилось найти Жаль
Гм... Действительно, явно нигде не написано.
Возможно, это неявно следует из требований к random access iterators (по стандарту vector обязан их поддерживать):
*a returns T&
*(a + n) returns T&
a[n] equals *(a + n)
a[n] returns T&
&a[n] retruns T*
Для того, чтобы эти выкладки всегда выполнялись, нужно, чтобы vector был непрерывным куском памяти.
« Последнее редактирование: 02-04-2006 19:54 от Hooter » Записан
Anchorite
Гость
« Ответ #3 : 03-04-2006 02:17 » 

2baldr:
Тут ты не совсем прав.  Для меня гораздо красивее и понятнее написать

Код:
std::vector<char> buffer(1024)

inputStream.read(&buffer[0], buffer.size());

чем городить цикл с итератором или for_each.

2Hooter
Спасибо за наводку, поищем еще разок Ага
Записан
LP
Помогающий

ru
Offline Offline

« Ответ #4 : 22-04-2006 12:08 » 

Об этом сказано в первом же абзаце про std::vector:
§23.2.4 ¶1
Цитата
The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type
other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().
Для std::string, кстати, наоборот это не гарантируется.
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Anchorite
Гость
« Ответ #5 : 22-04-2006 20:09 » 

LP, не подскажешь ссылку на текст Стандарта, где это все написано.
А то я что-то в своем ничего подобного не нашел Жаль
Записан
LP
Помогающий

ru
Offline Offline

« Ответ #6 : 22-04-2006 20:24 » 

Это была цитата из 2-го издания стандарта (2003 г). Скачал я его из p2p сетей (прогой eMule plus).
Заглянул в стандарт 98 года, и вправду этих строк там нету...
Еще есть черновик (draft) стандарта за 2005г. Его бесплатно можно скачать отсюда:
http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2005/n1905.pdf
Записан

Если эта надпись уменьшается, значит ваш монитор уносят
Anchorite
Гость
« Ответ #7 : 22-04-2006 20:35 » 

LP, спасибо!!!

2-ое издание стандарта можно утянуть отсюда:
http://www.usatlas.bnl.gov/~dladams/cpp/INCITS+ISO+IEC+14882-2003.pdf
Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 24-04-2006 05:44 » 

LP, спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines