Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

Вопрос по вектору string'ов - C++
Не совсем представляю как работает вектор стрингов std::vector<std::string> texts; Вектор по стандарту располагается в едином куске...

Вопрос по строкам (string) - C++
нужно взять с клавиатуры 2 строки...ну я недолго думая решил воспользоваться методом getline(), потому как манипулятор skipws не работает...

Где и почему используют ту или иную строку std::string, char[], System::String^ ? - C++
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните пожалуйста где нужно использовать...

Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина? - C++
#include <stdlib.h> #include <iostream> #include <string.h> //using namespace std; class string { private: int...

сохранение/чтение map<string,string*> в файл - C++
Доброго времени суток, Нужно сделать БД для индексации содержимого текстовых файлов, сначала решил, что все просто: читаем файл и...

Сравнение string::iterator со string::reverse_iterator - C++
Уважаемые форумчане, подскажите пожалуйста, как можно сравнить string::iterator и string::reverse_iterator, в частности что бы определить,...

'string' : undeclared identifier, std::string - C++
#include &lt;regex&gt; #include &lt;string&gt; #include &lt;vector&gt; std::vector&lt;string&gt; Tokenize( const string str, const std::regex regex ) { ...

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ? - C++
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа Ivanov potato 200) Использовать именно map&lt;string,...

запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’ - C++
private: std::string firstName; }; std::string ClientData::getFirstName() const{ return firstName; } Дает в итоге...

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" - C++
Добрый день! Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс 5-е изд 2014(Стэнли Б. Липпман)&quot;. ...


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

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

Он резервирует дополнительную память только когда старая кончилась при добавлении элементов
Всмысле только когда добавляемый элемент уже не умещается или же и когда добавляемый элемент занял всю выделенную память, но уместился?
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
01.05.2011, 18:46     Вопрос по string'у #4
Цитата Сообщение от Union Посмотреть сообщение
А резервировать нужно ровно столько, сколько символов в строке или сколько символов в строке + нул-байт?
В случае, если передается явная строковая константа, то нуль-символ учитывать не стоит, внутри вычисляется актуальная длина строки и дальше обычно с помощью memcpy идет копирование без учета нуль-символа.
Цитата Сообщение от Union Посмотреть сообщение
Всмысле только когда добавляемый элемент уже не умещается или же и когда добавляемый элемент занял всю выделенную память, но уместился?
когда уже не уместился.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
01.05.2011, 18:48     Вопрос по string'у #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.
Yandex
Объявления
01.05.2011, 18:48     Вопрос по string'у
Ответ Создать тему
Опции темы

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