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

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

Войти
Регистрация
Восстановить пароль
 
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
#1

Вопрос по string'у - C++

01.05.2011, 17:59. Просмотров 447. Ответов 4
Метки нет (Все метки)

Насколько мне известно, string резервирует память, как и вектор... Если это так, возможно ли отключить резервирование, т.к. в ходе работы приложения содержимое будет добавлено всего один раз и дальше будет происходить только считывание?
Или может есть какая-та более оптимальная по памяти и скорости альтернатива стрингу в таких случаях?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2011, 17:59
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вопрос по string'у (C++):

Вопрос по массивав, "институтский" вопрос. - C++
Готовлюсь к летней сессии по программированию. С++ Есть такая вот задачка (привожу как есть) В документации подобного не...

Вопрос по SetParent (поэтому, наверное, это вопрос к NickStaves) - Visual Basic
Есть набор форм, назовём их 'интерфейсными'. Есть отдельная форма, назовём её 'хранилищем'. Сама по себе она нигде не используется: лишь...

[ВОПРОС]: Меню и вопрос при регистрации - VBulletin
Помогите пожалуйста. У меня vbulletin 4.0.7 и после установки в верхнем меню есть лишняя навигация. Например: Главная Форум Blogs ...

Вопрос о картинках, вопрос о формулах - VBA
Всем доброго времени суток! Как обычно глупые вопросы... Вопрос первый, с сайта копируется информация (картинки + циферки ;-)) Так...

Вопрос по #if - C++
const LEVEL = 4; #if LEVEL == 5 cout <<5<<endl; #elif LEVEL == 4 cout <<4<<endl; #else cout...

вопрос!!!!!!!!! - Visual Basic
как в VB сделать на форме в текстовом поле ползунок, чтобы можно было прокручивать неумещающиеся данные??????

4
Ma3a
Эксперт С++
619 / 463 / 31
Регистрация: 28.01.2011
Сообщений: 605
01.05.2011, 18:10 #2
Он резервирует дополнительную память только когда старая кончилась при добавлении элементов. Раз вы ничего не собираетесь менять , присвоив значение лишь один раз, так и зарезервируйте ровно столько, сколько нужно, и ничего дополнительно резервироваться не будет(либо сразу же в конструкторе нужную строку присвойте и памяти будет выделено сколько надо).
1
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
01.05.2011, 18:38  [ТС] #3
А резервировать нужно ровно столько, сколько символов в строке или сколько символов в строке + нул-байт?

Он резервирует дополнительную память только когда старая кончилась при добавлении элементов
Всмысле только когда добавляемый элемент уже не умещается или же и когда добавляемый элемент занял всю выделенную память, но уместился?
0
Ma3a
Эксперт С++
619 / 463 / 31
Регистрация: 28.01.2011
Сообщений: 605
01.05.2011, 18:46 #4
Цитата Сообщение от Union Посмотреть сообщение
А резервировать нужно ровно столько, сколько символов в строке или сколько символов в строке + нул-байт?
В случае, если передается явная строковая константа, то нуль-символ учитывать не стоит, внутри вычисляется актуальная длина строки и дальше обычно с помощью memcpy идет копирование без учета нуль-символа.
Цитата Сообщение от Union Посмотреть сообщение
Всмысле только когда добавляемый элемент уже не умещается или же и когда добавляемый элемент занял всю выделенную память, но уместился?
когда уже не уместился.
1
ForEveR
В астрале
Эксперт С++
7992 / 4751 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
01.05.2011, 18:48 #5
Union, Только когда не умещается вестимо.

C++
1
2
3
4
5
6
7
8
9
    void __CLR_OR_THIS_CALL reserve(size_type _Newcap = 0)
        {   // determine new minimum length of allocated storage
        if (_Mysize <= _Newcap && _Myres != _Newcap)
            {   // change reservation
            size_type _Size = _Mysize;
            if (_Grow(_Newcap, true))
                _Eos(_Size);
            }
        }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    bool __CLR_OR_THIS_CALL _Grow(size_type _Newsize,
        bool _Trim = false)
        {   // ensure buffer is big enough, trim to size if _Trim is true
            if (max_size() < _Newsize)
            _String_base::_Xlen();  // result too long
        if (_Myres < _Newsize)
            _Copy(_Newsize, _Mysize);   // reallocate to grow
        else if (_Trim && _Newsize < _BUF_SIZE)
            _Tidy(true, // copy and deallocate if trimming to small string
                _Newsize < _Mysize ? _Newsize : _Mysize);
        else if (_Newsize == 0)
            _Eos(0);    // new size is zero, just null terminate
        return (0 < _Newsize);  // return true only if more work to do
        }
C++
1
2
3
4
    void __CLR_OR_THIS_CALL _Eos(size_type _Newsize)
        {   // set new length and null terminator
        _Traits::assign(_Myptr()[_Mysize = _Newsize], _Elem());
        }
Сие из MSVS.
1
01.05.2011, 18:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2011, 18:48
Привет! Вот еще темы с ответами:

Вопрос по БД - MS Access
Народ, помогите с курсовой по Access-у! Задача стоит такая изначально: 1. Создать базу данных &quot;Кафе&quot;, с меню и продуктами, из чего они...

Вопрос ??? - MS Access
Из акцесса запускаю дочерний процесс и ф-ей WaitForSingleObject жду завершения его выполнения. Вопрос: Как при этом обновлять содержимое...

вопрос по if - Delphi
Ничё не пойму... есть код такой вот var Form1: TForm1; Bitmap: TBitmap; procedure TForm1.Button1Click(Sender:...

Вопрос - C++
Такая задача возникла... Есть класс например: class tempClass { public: const int size; tempClass(){size=100;} };


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

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

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