[C++/STL] Ввод-вывод контейнеров STL [closed]

Missi4ka

Напомните, плиз, операции << и >> для контейнеров в STL как работают: они сохраняют и восстанавливают весь контейнер целиком, представляя его в некотором своём формате, или последовательно вызывают << или >> для каждого элемента, требуя, чтобы эта операция была определена?
Мне нужно записать (а потом прочитать) на диск множество некоторых объектов. При этом желательно, чтобы запись и чтение производились с помощью оператров сдвига, переопределенных для моего класса. Обходить всё множество не хочется, так как операция инкремента итератора на ассоциативных контейнерах работает медленно.
К тому же, при чтении элементов из файла во множество будет происходить потеря времени на балансировку дерева, которым представляется множество. Ее можно избежать, если сохранять в правильном порядке. Делает ли это класс set автоматически?

pitrik2

а не проще создать файл 1.cpp, написать в нем 5-6 строчек и проверить это дело, чем сидеть и ждать пока ктонить другой теже 5-6 строчек напишет и ответит в форуме?

Werdna

я написал свой binary stream, и очень весело скидываю туда и читаю.
только это всё фигня, ни к чему сверхинтересному я не пришел.
а с чего ты решил что << >> уже орпределены? для каких потоков? что юзаешь?

Missi4ka

Хочется юзать istream и ostream, чтобы можно было стандартный ввод и вывод использовать.
Первый мой вопрос таков: верно ли, что для контейнера set определены операции istream::operator >> и ostream::operator <<, чтобы можно было просто писать

set<MyClass> set;
cin >> set;
...
cout << set;
(При условии, конечно, что операции сдвига для MyClass корректно определены.)
Это нужно вместо стандартного способа

for (cur = set.beg; cur != set.end; ++cur) cout << *cur;
(На самом деле ввод и вывод будут перенаправляться в файлы, так что на экране никакого "бреда" не будет.)
И второй вопрос: если ввод и вывод для set уже реализованы в STL, то насколько оптимально? Действительно ли ввод множества целиком работает быстрее, чем поэлементное чтение и добавление (это работает медленно из-за балансировки дерева в set)? Если стандартная реализация тупо прокручивает контейнер и делает << для каждого элемента, то это можно и руками сделать для set.

evgen5555

Операторы-то определены, а вот класс свойств придется реализовывать ручками.

kokoc88

Блин, тебе уже написали, что уже можно было несколько раз самостоятельно проверить. Тем более, что в любом компиляторе есть исходники stl. Если тебя интересует производительность, то надо использовать boost. Или писать свои функции руками.

Missi4ka

Блин, тебе уже написали, что уже можно было несколько раз самостоятельно проверить
так и скажи: "не знаю". про исходники и без тебя мне известно.

kokoc88

так и скажи: "не знаю". про исходники и без тебя мне известно.
Я всё знаю. Просто мне не понятно, на кой надо сидеть 3 часа и ждать ответа на форуме, если тебе всё известно про исходники.

Missi4ka

неахота лезть в исходники. в форум глянуть прощче

Realist

Никак не работают, если ты сам их не определишь.

pitrik2

неахота лезть в исходники. в форум глянуть прощче
пусть за меня другие все делают, а мне неохота
банить таких нада...

ppplva

Просто не отвечай, и они постепенно вымрут.

evgen5555

Чувствую, что неправильно, но выразить не могу, ибо меня подзаебала тема о произношении слова Java

Missi4ka

Нет, ну а нахрена тогда форум, если все советы дают в стиле RTFM? Не можешь на лету ответить — вали нах.
Форум хорош для быстрых лёгких вопросов, чтоб за всякой фигней в мануал не лезть. Ответов на трудные вопросы тут всё равно не получишь, ибо большинству влом думать над чужими задачами. Оно и понятно, врмя-то не резиновое.

ppplva

Продолжай в том же стиле, и на твои вопросы, кроме таких же "вали-нахов", никто отвечать не будет.

smit1

>Операторы-то определены
Что-то никак не могу найти. Поконкретнее напиши.

evgen5555

template<class _Elem, class _Traits> inline
basic_ostream<_Elem, _Traits>& __cdecl operator<<(
basic_ostream<_Elem, _Traits>& _Ostr, _Elem _Ch)

pitrik2

ну почитай чего другие спрашивают и что им отвечают
есть вопросы которые наизусть назубок никто не знает, потому что когда это надо каждый смотрит rtfm, тупо по нему делает и тут же про это забывает
спрашивать такие вопросы в форуме - просто кощунство

Missi4ka

Ладно, согласен. Постараюсь теперь задавать лишь нетривиальные вопросы, а то будет как в Study: "нарисуйте, плиз, график дельта-функции"
Оставить комментарий
Имя или ник:
Комментарий: