Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
ANSI С/С++
(Модератор:
Вад
) > Тема:
std::vector и массивы C
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: std::vector и массивы C (Прочитано 20828 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Anchorite
Гость
std::vector и массивы C
«
:
02-04-2006 18:13 »
В книге "Эффективное использование STL" Скотта Мейерса в совете 16 прочел:
Цитата
В соответствии со Стандартом С++ элементы vector должны храниться в памяти непрерывно, по аналогии с массивом.
Никто не знает номер этого пункта в Стандарте где это написано или из которого это следует.
Что-то у меня не получилось найти
Записан
baldr
Команда клуба
Offline
Пол:
Дорогие россияне
Re: std::vector и массивы C
«
Ответ #1 :
02-04-2006 18:52 »
Вообще, если ты просто используешь vector, то тебя не должно заботить каким образом он организован в памяти. Реализация может быть разной. Доступ обеспечивается через итератор, который может указывать на совершенно различные области памяти. Я считаю, что в этом как раз плюс вектора.
Массив же удобнее использовать непрерывный, но иногда может понадобиться разбить его на части..
Кстати, vector ИМХО не должен быть прописан в стандарте языка, поскольку std - это самостоятельная библиотека.
Записан
Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Hooter
Опытный
Offline
Пол:
Re: std::vector и массивы C
«
Ответ #2 :
02-04-2006 19:51 »
Цитата: Anchorite от 02-04-2006 18:13
Никто не знает номер этого пункта в Стандарте где это написано или из которого это следует.
Что-то у меня не получилось найти
Гм... Действительно, явно нигде не написано.
Возможно, это неявно следует из требований к 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
Гость
Re: std::vector и массивы C
«
Ответ #3 :
03-04-2006 02:17 »
2baldr
:
Тут ты не совсем прав. Для меня гораздо красивее и понятнее написать
Код:
std::vector<char> buffer(1024)
inputStream.read(&buffer[0], buffer.size());
чем городить цикл с итератором или for_each.
2Hooter
Спасибо за наводку, поищем еще разок
Записан
LP
Помогающий
Offline
Re: std::vector и массивы C
«
Ответ #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
Гость
Re: std::vector и массивы C
«
Ответ #5 :
22-04-2006 20:09 »
LP, не подскажешь ссылку на текст Стандарта, где это все написано.
А то я что-то в своем ничего подобного не нашел
Записан
LP
Помогающий
Offline
Re: std::vector и массивы C
«
Ответ #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
Гость
Re: std::vector и массивы C
«
Ответ #7 :
22-04-2006 20:35 »
LP, спасибо!!!
2-ое издание стандарта можно утянуть отсюда:
http://www.usatlas.bnl.gov/~dladams/cpp/INCITS+ISO+IEC+14882-2003.pdf
Записан
Hooter
Опытный
Offline
Пол:
Re: std::vector и массивы C
«
Ответ #8 :
24-04-2006 05:44 »
LP
, спасибо.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
ANSI С/С++
(Модератор:
Вад
) > Тема:
std::vector и массивы C
Загружается...