3 / 3 / 0
Регистрация: 28.11.2018
Сообщений: 242
|
|
1 | |
Что быстрее работает string или sstream?01.11.2020, 14:52. Показов 2868. Ответов 7
Метки нет (Все метки)
Давно уже вижу как используют эти два класса
Но какая между ними потенциальная разница? По факту они делают одно и то же, только выглядит в коде это чуть иначе - это как я это вижу.
0
|
01.11.2020, 14:52 | |
Ответы с готовыми решениями:
7
Оптимизация. Что быстрее работает: cout или printf что быстрее работает рекурсия или цикл Что быстрее работает - активноть или popup окно Что работает быстрее, ввод с консоли или ввод с файла? |
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
01.11.2020, 17:23 | 2 |
Ну, интерфейс у них вообще разный. Как-то слабо можно представить, чтоб одно можно было заменить другим
0
|
Неэпический
|
|
01.11.2020, 17:38 | 3 |
В C++ такого класса нет. Есть заголовочный файл для "подключения" stringstream.
Почему вы так решили? Этот как бы вообще разные вещи. Листок - string Карандаш - stringstream
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
01.11.2020, 18:56 | 4 |
sstream - название хэдера, а не класса.
есть два хэдера: string и sstream они содержат принципиально разный код, принципиально разных механизмов. есть два класса: std::string и std::stringstream это - два принципиально разных класса, которые делают принципиально разные вещи, принципиально разными способами. ты художник что ли?
0
|
3 / 3 / 0
Регистрация: 28.11.2018
Сообщений: 242
|
|
01.11.2020, 22:47 [ТС] | 6 |
прошу прощения, быстро писал, перепутал. Да, я имел ввиду именно строковый поток -
str::stringstream Ну... Просто я вижу, что вся разница между string (дальше S) и str::stringstream (дальше SS) это в том, что для добавления в S используется метод append() или перегруженный оператор += А для SS используется перегруженный оператор << , плюс ко всему еще не нужно морочиться с типом данных, он автоматом переводит int\float\char итд в строковый тип, без дополнительного использования std::to_string(в случае S)Добавлено через 57 секунд вот немного выше ответил Croessmah на счёт и вашего ответа. А интересует, что именно вы имеете ввиду под "принципиально разными способами"??? Хотелось бы узнать Добавлено через 3 минуты нет. Я это использую. Разницу в использовании какую вижу, такую и написал. Для меня лично, это вместо append() \+= используется просто << а записывает std::stringstream всё равно в тот же std::string который в нём находится(в std::stringstream -е)Добавлено через 3 минуты Вероятно... Ну, я понимаю поток, как поток каких-то данных, будь то данные фильма, которые копируются с флешки на диск D, будь то данные строки, которые копируются с const char * в std::string который находится внутри std::stringstream
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
02.11.2020, 00:11 | 7 | |||||
Сообщение было отмечено MJ_PRUTYG как решение
Решение
вот есть вертолет. он летает.
есть автомобиль. он катиццо по земле. есть подводная лодка. она плавает под водой. это - принципиально разные способы перемещения. они принципиально разные, потому что принцип действия у них различнный. или вот такой пример: есть "фломастер" - это такая штука, при помощи которой можно рисовать. и есть "фиолетовый" - это вообще прилагательное. обозначет цвет предмета. ну так вот, "фломастеры" и "фиолетовый" - принципиально разные вещи. как "тёплое" с "мягким". std::string и std::stringstream - прниципильно разные механизмы. они предназначены для принципиально разных задач. std::stringstream - поток данных. как и любой другой поток, его задача: ввод/вывод данных. ты знаешь что такое "поток данных" и зачем он нужен? "поток данных" - это механизм, который абстрагирует тебя от работы с реальным физическим устройством ввода/вывода. таким устройством может быть: файл, принтер, сокет, пайп, или просто кусок оперативной памяти. а рассуждаешь ты как самый настоящий художник. нет не все равно "в тот же std::string" ты можешь извлечь данные из std::stringstream в виде std::string. однако сам механизм std::stringstream не хранит внутри себя std::string. внутри себя он хранит особый механизм - потоковый буффер, который умеет непосредственно отправлять/получать байты для/от конкретных устройств ввода/вывода. концепция "потока данных" - это труба. один конец держишь ты, в своей программе. другой ведет на некоторое устройство. раз ты - художник, попробую описать тебе идею в виде художественного образа. представь себе трубу. обычную длинную трубу. представил? ты держишь эту трубу за один конец. а другой её конец воткнут в принтер. прямо через корпус. представил? теперь ты берешь данные - какие то байты информации. представь их себе в виде надписей на обрывках бумаги. и вот ты берешь эти обрывки бумаги и забрасываешь их в трубу. обрывки с информаций падают в трубу, и вываливаются через другой конец прямо в принтер. а принтер только и ждет когда из его конца трубы повалятся данные. и вот когда из трубы начинает вываливаться информация, принтер делает с ней то, что и должен сделать - распечатывает на бумаге. главная изюминка такого подхода в том, что тебе не нужно знать, как на самом деле происходит передача данных. ты знай себе - запихивай в свой конец трубы данные, а дальше все будет происходить как по волшебству: данные можно отправить на принтер, или в консоль, или в файл, или в сокет отправить по сети, и тп. такой подход избавляет пользователей знать, как на самом деле устроены физические устройства. std::stringstream - это и есть вот такая вот труба, через которую ты можешь передавать текстовую информацию. все, что ты в неё запихиваешь преобразуется к текстовому виду, и проталкивается на другой конец. сама передача осуществляется руками потокового буффера, который в свою очередь оперирует понятием "байты". ему безразлично, что "байты" - это на самом деле текст. его задача: вот что ему закинули в трубу, то нужно просто взять, и запинать/протолкнуть на другой её конец. такая архитектура позволяет перенаправлять данные одного потока в другой. например, следующий код иллюстрирует, как можно "перенаправить поток данных std::cout в текстовую переменную" https://rextester.com/XGTL27218
std::cout - это один конец трубы.через который ты закидываешь данные. другой конец трубы обычно ведет в консоль (устройство, которое отвечает за печать текста в черно-белом окошке) я же перенаправил другой конец трубы так, что бы получателем данных оказался объект std::stringstream g_stream
1
|
3 / 3 / 0
Регистрация: 28.11.2018
Сообщений: 242
|
|
02.11.2020, 15:38 [ТС] | 8 |
hoggy, огромное спасибо за развернутый ответ))
Всё понял, но хочу уточнить последнюю деталь: является ли "потоком" присвоение данных той де переменной? Н-р: int a = 5; Добавлено через 2 минуты По факту то это тоже определенный поток данных... Только направлен он от константы к переменной
0
|
02.11.2020, 15:38 | |
02.11.2020, 15:38 | |
Помогаю со студенческими работами здесь
8
Перевести int в string с помощью sstream Оптимизация кода, структуры базы, или что еще можно сделать что бы быстрее работало!? Что работает быстрее? Что работает быстрее? Что работает быстрее? Что быстрее 7 или XP? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |