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

Сколько живёт строковый литерал? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамический массив структур http://www.cyberforum.ru/cpp-beginners/thread1090853.html
:-| по рисунках нужно написать программы(отдельные), которая обеспечят следующее расположение данных в памяти
C++ Как подключить библиотеку? Скачал c boost.org архив с библиотекой boost скинул в папку @C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\\lib\boost@ пытаюсь подключить: #include <C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\boost\boost\filesystem\path.hpp> #include <C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\boost\boost\filesystem\fstream.hpp> #include <C:\Program Files... http://www.cyberforum.ru/cpp-beginners/thread1090834.html
C++ не правильно выводит результат
тестю код на таком примере 6 6 1 1 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 0 1
Сортировка вектора C++
struct A { int a; double e; }; vector <A> z; sort(z.begin(), z.end(), ......) отсортировать по а ( дописать где многоточие) Прошу помочь, дописать только там где многоточие, без дополнительных строк, заранее спасибо
C++ В одномерном массиве А из n элементов удалить средний элемент http://www.cyberforum.ru/cpp-beginners/thread1090812.html
В одномерном массиве А из n элементов удалить средний элемент
C++ Как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле? подскажите пожалуйста, как узнать что при считывание очередного слова в string был сделан переход на новую строку в файле?. ПС не предлагайте метод getline подробнее

Показать сообщение отдельно
DrOffset
6795 / 4006 / 920
Регистрация: 30.01.2014
Сообщений: 6,830
06.02.2014, 23:28     Сколько живёт строковый литерал?
Цитата Сообщение от DrARTI Посмотреть сообщение
Я, конечно, очень люблю, когда мне отвечают, но тут слишком многобукафф. Может, получится по-конкретнее немного? Кусок кода там, или синопсис какой-нибудь, не знаю. Я ведь со своим знанием плюсов не пойму иначе ничерта.
Я просто привел ссылку на один из самых авторитетных источников, чтобы не было сомнений в том, что я говорю
Можно концепцию проиллюстрировать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class string_view
{
public:
    typedef char const *   iterator;
    typedef const iterator const_iterator;
 
    string_view(char const * str, size_t len);
    string_view(const_iterator begin, const_iterator end);
    string_view();
 
    const_iterator begin() const;
    const_iterator end() const;
 
    size_t size() const; 
 
    string_view substr(size_t start, size_t len = -1) const;
 
private:
    char const * begin_;
    char const * end_;
};
Представим, что у нас есть некий большой буфер, содержащий строку, которую надо парсить на подстроки. Так как нам нужно данные только читать, то такое решение идеально подойдет. В отличие от обычной строки тут нет расходов на копирование и выделение памяти для подстрок. Каждая подстрока просто "вырезанное" представление части более общей строки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char buf[size] = "very long string for parsing";
 
some_parsing_algo(string_view(buf, size));
//.....
 
void some_parsing_algo(string_view const & str)
{
// все STL алгоритмы с итераторами будут работать
// найдем первый пробел
    string_view::const_iterator space = std::find(str.begin(), str.end(), ' ');
    if(space != str.end())
    {
         // получим подстроку "very"
         string_view sub = str.substr(0, std::distance(str.begin(), space));
    }
}
Реализация методов string_view тривиальна.
Естественно тут нужно следить за временем жизни буфера, который используется в таком представлении.
 
Текущее время: 13:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru