На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 389 390 [391] 392 393 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Во как. Что ж, напомню. Ты сказал, что не знаешь, зачем хранить строку в сотни МБ в памяти. Я привёл примеры, когда это может понадобится. Всё.

    Добавлено
    Цитата KILLER @
    ну да, я так и подумал что щас будут перечислять всякие там контроллеры
    Ну так С++ - это не только и даже не столько Windows.

    Цитата KILLER @
    Чтобы максимально ускорить работу с девайсом, необязательно же там классы юзать.
    С++ строки практически не уступают по скорости Си-строкам - это ж шаблоны, почти всё инлайнится.

    Цитата KILLER @
    Я только не пойму, нахрена мне там строка на пару сотен метров нужна?
    Ну, например, вот идёт поток текстовых данных - от того же GPRS, например, - и надо их не только распарсить, но и хранить.

    Цитата KILLER @
    Ну наверное больше С подошел бы... ХЗ...
    Не, ну на Си - модуль ядра написать, а обычное приложение для обычного микроконтроллера с линюхом - легче на С++.
      Цитата Adil @
      Во как. Что ж, напомню. Ты сказал, что не знаешь, зачем хранить строку в сотни МБ в памяти. Я привёл примеры, когда это может понадобится. Всё.

      Ок, какие проблемы? Храни на здоровье речь тут не об этом. Хоть на терабайт храни.

      Цитата Adil @
      С++ строки практически не уступают по скорости Си-строкам - это ж шаблоны, почти всё инлайнится.

      Раскатал губу, еще как уступят, при первом же юзаньи сишной функции, в которую тебе нужно будет передать строку для модификации, тебе придется распрощатся с еще несколько сотнями мегабайт памяти, а также копировании всей строки во временный массив.
      Сообщение отредактировано: KILLER -
        Цитата KILLER @
        Цитата Adil @
        Во как. Что ж, напомню. Ты сказал, что не знаешь, зачем хранить строку в сотни МБ в памяти. Я привёл примеры, когда это может понадобится. Всё.

        Ок, какие проблемы? Храни на здоровье речь тут не об этом. Хоть на терабайт храни.

        За контекстом не следишь и слов собственных не помнишь :D ?

        Цитата
        Раскатал губу, еще как уступят, при первом же юзаньи сишной функции, в которую тебе нужно будет передать строку для модификации, тебе придется распрощатся с еще несколько сотнями мегабайт памяти, а также копировании всей строки во временный массив.

        Зачем тебе тогда std::string :-?

        Добавлено
        KILLER, в С++, как и в большинстве других языков, класс строки работает не с null-terminated строками. Понимаешь? И не должен этого делать - работа с ними не эффективна и связана с определенными ограничениями(как минимум ты не можешь использовать 0-символ в произвольном месте строки). Более того, т.к. такие строки - это не тип, а соглашение, ты накладываешь ограничение на внутреннее представление объекта класса.
        Хотя с другой стороны, быть может в стандартной библиотеке имело смысл завести специальный класс для работы с null-terminated строками. Но std::string так вести себя не должен.
          Цитата D_KEY @
          За контекстом не следишь и слов собственных не помнишь :D ?

          Да все я помню. Я не понимаю в чем проблемы?

          Цитата D_KEY @
          Зачем тебе тогда std::string :-?

          Цитата Adil @
          ну так если это текст, зачем другой то?


          Добавлено
          Цитата D_KEY @
          KILLER, в С++, как и в большинстве других языков, класс строки работает не с null-terminated строками. Понимаешь? И не должен этого делать - работа с ними не эффективна и связана с определенными ограничениями(как минимум ты не можешь использовать 0-символ в произвольном месте строки). Более того, т.к. такие строки - это не тип, а соглашение, ты накладываешь ограничение на внутреннее представление объекта класса.
          Хотя с другой стороны, быть может в стандартной библиотеке имело смысл завести специальный класс для работы с null-terminated строками. Но std::string так вести себя не должен.

          У меня никогда не возникало желание, запихнуть бинарный сиквенс в std::string, в вектор пожалуйста. Также я не считаю бинарный сиквенс - строкой. Кстати по ссылке на тему которую я дал, там ты со мной в этом был согласен. Так что мимо.

          Добавлено
          Цитата D_KEY @
          Хотя с другой стороны, быть может в стандартной библиотеке имело смысл завести специальный класс для работы с null-terminated строками. Но std::string так вести себя не должен.

          Обоснуй.
          Сообщение отредактировано: KILLER -
            Цитата KILLER @
            У меня никогда не возникало желание, запихнуть бинарный сиквенс в std::string, в вектор пожалуйста. Также я не считаю бинарный сиквенс - строкой. Кстати по ссылке на тему которую я дал, там ты со мной в этом был согласен. Так что мимо.

            Был. Согласен. Только это все-равно ограничение. И одно дело, когда ты сам не станешь это делать в большинстве случаев, и совсем другое, когда язык/библиотека тебе это запрещает.

            Цитата
            Цитата D_KEY @
            Но std::string так вести себя не должен.

            Обоснуй.

            null-terminated строки не дают никаких преимуществ при работе со строками, как со строками :) И ни в одном языке классы/встроенные типы строк так себя не ведут.
            Это не тип. Это соглашение, которому следует С, и которое иногда может быть удобным. Не более того.
            Для стандартных операций со строками никакого профита от их использования нет.
            Одни недостатки - ограничение из-за соглашения, отсутствие информации о длине, возможные ошибки при работе.
            Так же, обычный оператор индексирования может обрезать строку. Просто замечательно :)
            И главное не понятно - зачем тебе null-terminated строки?
              Цитата D_KEY @
              Был. Согласен. Только это все-равно ограничение. И одно дело, когда ты сам не станешь это делать в большинстве случаев, и совсем другое, когда язык/библиотека тебе это запрещает.

              Для этого есть другие средства.

              Цитата D_KEY @
              null-terminated строки не дают никаких преимуществ при работе со строками, как со строками :) И ни в одном языке классы/встроенные типы строк так себя не ведут.

              Так по убожески? :D Соглсен.

              Цитата D_KEY @
              Это не тип. Это соглашение, которому следует С, и которое иногда может быть удобным. Не более того.

              Но для обратной совместимости в С++ это соглашению пользуют и особо не паряца.

              Цитата D_KEY @
              Для стандартных операций со строками никакого профита от их использования нет.

              Например?

              Цитата D_KEY @
              Так же, обычный оператор индексирования может обрезать строку. Просто замечательно :)

              Как и зачем?

              Цитата D_KEY @
              И главное не понятно - зачем тебе null-terminated строки?

              для обратной совместимости с С-строками.
              Сообщение отредактировано: KILLER -
                Цитата KILLER @
                Цитата D_KEY @
                null-terminated строки не дают никаких преимуществ при работе со строками, как со строками :) И ни в одном языке классы/встроенные типы строк так себя не ведут.

                Так по убожески? :D Соглсен.

                Да, null-terminated строки для задач работы с обычными строками - это действительно по убожески.

                Цитата
                Но для обратной совместимости в С++ это соглашению пользуют и особо не паряца.

                Для совместимости - это одно, а для нового средства - это другое.

                Цитата
                Цитата D_KEY @
                Для стандартных операций со строками никакого профита от их использования нет.

                Например?

                Вот и приведи пример профита :)

                Цитата
                Цитата D_KEY @
                Так же, обычный оператор индексирования может обрезать строку. Просто замечательно :)

                Как и зачем?


                ExpandedWrap disabled
                  killer::string s = "Hello";
                  s[1] = '\0';

                Еще весело итераторам.

                Цитата
                Цитата D_KEY @
                И главное не понятно - зачем тебе null-terminated строки?

                для обратной совместимости с С-строками.

                Для этого есть другие средства - обычные массивы, указатели, а так же вектора.
                  Цитата D_KEY @
                  Да, null-terminated строки для задач работы с обычными строками - это действительно по убожески.

                  Помойму только вы тут раздуваете из мухи слона. std::string как раз в большинстве реализаций и сделан в виде массива символов оканчивающийся '\0' . А вы предумываете мнимую оптимизированную работу с какимито мега строками. ну вот например:
                  ExpandedWrap disabled
                    #include <iostream>
                    #include <string>
                     
                    int main()
                    {
                       std::string s = "This is simple string for testing std::string functionality";
                       const char* pStr = &s[0];
                     
                       std::cout << pStr;
                       return 0;
                    }

                  Знаешь что выведет MSVS2005 ? Хочешь, давай потестим на остальных компиляторах? Где профит?

                  Цитата D_KEY @
                  Вот и приведи пример профита :)

                  Обратная совместимость с С-строкой, это и есть профит. Избегаение создание временного массива и т.д.


                  Цитата D_KEY @
                  Еще весело итераторам.

                  Ну программист наверное отдает отчет своим действиям. Если он хочет так написать - это не должно быть проблеммой std::string класса.

                  Цитата D_KEY @
                  Для этого есть другие средства - обычные массивы, указатели, а так же вектора.

                  Значит для хранения С-строки, будь добр юзай массивы, векторы и т.д. А вот для представления бинарных данных - std::string , так выходит? :D
                    Цитата KILLER @
                    std::string как раз в большинстве реализаций и сделан в виде массива символов оканчивающийся '\0'

                    Нет.
                    Смотри:

                    ExpandedWrap disabled
                      std::string s("abcdef");
                       
                      s[1] = '\0';
                       
                      std::cout << s << std::endl;
                      std::cout << s.size() << ":|";
                      std::copy(s.begin(), s.end(), std::ostream_iterator<char>(std::cout, "|"));


                    ExpandedWrap disabled
                      a<крокозябра>cdef
                      6:|a|<крокозябра>|c|d|e|f|


                    Добавлено
                    Цитата KILLER @
                    ну вот например:
                    ExpandedWrap disabled
                      #include <iostream>
                      #include <string>
                       
                      int main()
                      {
                         std::string s = "This is simple string for testing std::string functionality";
                         const char* pStr = &s[0];
                       
                         std::cout << pStr;
                         return 0;
                      }

                    :lool:
                    Так ты выводишь c-строку. Выведи s ;)

                    Добавлено
                    Цитата KILLER @
                    Обратная совместимость с С-строкой, это и есть профит.

                    Для записи? А зачем оно? И почему не взять вектор в этом случае?

                    Цитата
                    Если он хочет так написать - это не должно быть проблеммой std::string класса.

                    Проблема не в желаниях программиста, проблема в логике работы класса.
                    Допустим, что символ приходит тебе извне, ты записываешь некий символ в строку и она ВНЕЗАПНО меняет размер. Весело, правда :D ?

                    Цитата
                    Значит для хранения С-строки, будь добр юзай массивы, векторы и т.д.
                    Конечно.

                    Цитата
                    А вот для представления бинарных данных - std::string , так выходит? :D

                    Нет, для нормальных строк(а не null-terminated) юзай std::string :)
                    Сообщение отредактировано: D_KEY -
                      Цитата D_KEY @
                      Нет.
                      Смотри:

                      попробуй подебажить. вот эта строчка:
                      ExpandedWrap disabled
                        std::string s("abcdef");

                      Закинеться в внутрений массив путем вызова memcpy . на MSVS2005 по крайней мере так.
                        Цитата KILLER @
                        Цитата D_KEY @
                        Нет.
                        Смотри:

                        попробуй подебажить. вот эта строчка:
                        ExpandedWrap disabled
                          std::string s("abcdef");

                        Закинеться в внутрений массив путем вызова memcpy . на MSVS2005 по крайней мере так.

                        И что?
                        Логика работы стандартных С++ строк не зависит от 0-символа. Он обрабатывается точно так же, как и любой другой.
                          А вот еще:\
                          ExpandedWrap disabled
                                _Myt& __CLR_OR_THIS_CALL append(const _Elem *_Ptr, size_type _Count)
                                    {   // append [_Ptr, _Ptr + _Count)
                                    if (_Inside(_Ptr))
                                        return (append(*this, _Ptr - _Myptr(), _Count));    // substring
                                    if (npos - _Mysize <= _Count || _Mysize + _Count < _Mysize)
                                        _String_base::_Xlen();  // result too long
                             
                                    size_type _Num;
                                    if (0 < _Count && _Grow(_Num = _Mysize + _Count))
                                        {   // make room and append new stuff
                                        _Traits_helper::copy_s<_Traits>(_Myptr() + _Mysize, _Myres - _Mysize, _Ptr, _Count); //! <<<--------------- Смотри.
                                        _Eos(_Num);
                                        }
                                    return (*this);
                                    }
                             
                             
                            ...
                             
                             
                                static _Elem *__CLRCALL_OR_CDECL _Copy_s(_Elem *_First1, size_t _Size_in_bytes, const _Elem *_First2,
                                    size_t _Count)
                                    {   // copy [_First1, _First1 + _Count) to [_First2, ...)
                            //      _DEBUG_POINTER(_First1);
                            //      _DEBUG_POINTER(_First2);
                                    _CRT_SECURE_MEMCPY(_First1, _Size_in_bytes, _First2, _Count); <<<--------- Смотри, вызовет memcpy
                                    return _First1;
                                    }


                          Добавлено
                          Цитата D_KEY @
                          И что?
                          Логика работы стандартных С++ строк не зависит от 0-символа. Он обрабатывается точно так же, как и любой другой.

                          То, что std::string в большинстве реализаций представляет собой обыкновенный массив, такой же как и вектор, ничуть не лучше и не хуже.
                            memcpy не имеет никакого отношения к С-строкам.
                              Цитата D_KEY @
                              memcpy не имеет никакого отношения к С-строкам.

                              вектор также не имеет никакого отношения к С-строкам.
                                Зачем ты эту жесть выложил? Чтобы в теме было побольше страшного кода на С++ :D ?

                                Добавлено
                                Цитата KILLER @
                                Цитата D_KEY @
                                memcpy не имеет никакого отношения к С-строкам.

                                вектор также не имеет никакого отношения к С-строкам.

                                Он к ним имеет такое же отношение, как и массив.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 389 390 [391] 392 393 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5666 ]   [ 15 queries used ]   [ Generated: 30.07.26, 10:55 GMT ]