Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Vector::reserve(), Vector в MSVCPP.NET 
:(
    Опции темы
GKosh
Дата 24.6.2006, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 27.12.2005

Репутация: нет
Всего: нет



Раньше как-то не приходилось использовать этот stl-класс.
Постоянно выдавает ошибки если перед добавлением элементов размер вектора не задавался явно  - reserve(количество_чтобы_наверняка). Глупость какая-то, ведь по идее он должен делать это сам с каким-то предустановленным шагом.

И сразу вопрос в догонку - если я создаю в VS.NET чистый Win32 проект без .NET'а возможно использовать в нем вектор? И если да, то будет ли он отличаться в ипользовании? (спрашиваю, поскольку на старой схеме но в новом проекте появился новый баг)

Заранее спасибо, Константин.  

Это сообщение отредактировал(а) GKosh - 24.6.2006, 09:03
PM MAIL   Вверх
Daevaorn
Дата 24.6.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(GKosh @  24.6.2006,  10:02 Найти цитируемый пост)
Постоянно выдавает ошибки если перед добавлением элементов размер вектора не задавался явно  - reserve(количество_чтобы_наверняка). 

reserve - на самом деле не увеличивает размер вектора. Он лишь говорит вектору, чтобы тот зрезервировал нужное количество пямяти под добавленные в последствии объекты.( v.reserve( N ) -> v.capacity() >= N -> v.size() != N )
resize - вот этот метод реально увеличивает размер вектора( v.resize( N ) -> v.size() == N )
Цитата(GKosh @  24.6.2006,  10:02 Найти цитируемый пост)
Глупость какая-то, ведь по идее он должен делать это сам с каким-то предустановленным шагом.

При использовании push_back(), insert() и т.д. - размер вектора сам увеличивается
Цитата(GKosh @  24.6.2006,  10:02 Найти цитируемый пост)
если я создаю в VS.NET чистый Win32 проект без .NET'а возможно использовать в нем вектор?

Стандартная библиотека не зависит от платформы. Вектор был и под ДОС. Конечно при условии, что компилятор под данную платформу.
Цитата(GKosh @  24.6.2006,  10:02 Найти цитируемый пост)
И если да, то будет ли он отличаться в ипользовании?

Следовательно нет. Разницы нет. 
PM MAIL WWW   Вверх
Fazil6
Дата 24.6.2006, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

Постоянно выдавает ошибки если перед добавлением элементов размер вектора не задавался явно

как добавляешь? если используя оператор [] то естественно будет ошибка. 
PM MAIL   Вверх
DeadSoul
Дата 24.6.2006, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(GKosh @  24.6.2006,  09:02 Найти цитируемый пост)
И сразу вопрос в догонку - если я создаю в VS.NET чистый Win32 проект без .NET'а возможно использовать в нем вектор? И если да, то будет ли он отличаться в ипользовании? (спрашиваю, поскольку на старой схеме но в новом проекте появился новый баг)

Ничем. Основный проблемы моут быть при использование stl при статической линковке рантайма.

Цитата(GKosh @  24.6.2006,  09:02 Найти цитируемый пост)
Постоянно выдавает ошибки если перед добавлением элементов размер вектора не задавался явно  - reserve(количество_чтобы_наверняка). Глупость какая-то, ведь по идее он должен делать это сам с каким-то предустановленным шагом.

Если использовать push_back, то будутпроисходить перераспределения памяти. Пример:
Код

    std::vector<int> vec;
//    vec.reserve(100000 ); Запусти с этой строчкой закомментированной и раскомментированной
    for ( int i=0 ; i<100000 ; ++i )
    {
        if ( vec.size() == vec.capacity() )
            std::cout<<"Relocating memory"<<std::endl;
        vec.push_back(i);
    }

    std::cout<<"Done"<<std::endl;



Добавлено @ 10:33 
Цитата(Fazil6 @  24.6.2006,  09:47 Найти цитируемый пост)
Цитата
Постоянно выдавает ошибки если перед добавлением элементов размер вектора не задавался явно
как добавляешь? если используя оператор [] то естественно будет ошибка.  

Добавлю. Попробуй "добавлять" используя метод at. Ошибку получишь гарантировано. Использование operator[] просто скрывает ошибку, а отладочная версия stl появилась только в 8-ке

Добавлено @ 10:34 
И еще скачай книгу Джосьютиса. Там все разжевано(и книга просто потрясающая) 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
MAKCim
Дата 24.6.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

И сразу вопрос в догонку - если я создаю в VS.NET чистый Win32 проект без .NET'а возможно использовать в нем вектор? И если да, то будет ли он отличаться в ипользовании?

в использовании отличаться не будет - в этом и прелесть стандартной библиотеки - она задает некоторые интерфейсы (не в прямом значении этого слова), которые неизменны, а сама реализация библиотеки на разных платформах может различаться 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Earnest
Дата 24.6.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



 smile 
Цитата(MAKCim @  24.6.2006,  15:31 Найти цитируемый пост)
она задает некоторые интерфейсы (не в прямом значении этого слова), 

Как раз в прямом. Слово "интерфейс" использовалось в программировании еще до появления модели COM.

 


--------------------
...
PM   Вверх
GKosh
Дата 26.6.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 27.12.2005

Репутация: нет
Всего: нет



Большое всем спасибо! Все понятно - вопрос закрыт. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0838 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.