![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Andrewshkovskii |
![]()
Сообщение
#1
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Можете привести примеры чтения и записи вектора через операторы << и >>?
я просто пока плохо представляю как это реализовать.. ![]() допустим вот для этого пример : class Team ostream& operator << (ostream& outs, const vector<Team>& v) Как надо правильно переопределить оператор >> для чтения из файла?. вот функция записи допустим : void file_save(const vector<Team>& v){ Извиняюсь,Если как-то плохо объяснил что нужно,или наплел тут чуши - голова уже не варит к концу дня. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
А зачем, собственно, тебе перегружать операцию ввода/вывода именно для вектора? Это чем-то обосновано? Почему не перегрузить именно для класса, и не читать/добавлять в вектор, пока не достигнем конца файла?
Кстати, пример файла, из которого читаются данные, можно привести? |
Andrewshkovskii |
![]()
Сообщение
#3
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
ну как видно по коду,он так же будет создан не правильно,ибо туда вводиться все то,что выводит оператор << для класса Team.
Это грубо не правильно,и я это понимаю.Я только решил попробывать.Хм..тоесть ,читать объект,потом делать push_back к этому объекту?в цикле читать..хм..просто я хотел написать метод,который бы читал сразу весь вектор.. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ну, так напиши себе метод (скажем, такой:
class Team { ), который будет читать поэлементно и делать push_back в вектор. А перегрузку >> делай именно для Team... Сообщение отредактировано: volvo - 30.05.2008 23:47 |
Andrewshkovskii |
![]()
Сообщение
#5
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
хм..сейчас попробую.Кстате,вопрос такой : почему дружественные функции не нарушают принципы инкапсуляции?
Ещё один : почему нельзя для outfile передавать имя файла как string?только чар?а если я хочу что бы пользователь не задавал расширение файла,мне же проще будет написать так : string filename; безусловно,в чар-строку можно тоже добавить символы.Просто так же проще,вроде..? Сообщение отредактировано: Andrewshkovskii - 30.05.2008 23:59 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Потому, что дружественная функция - это часть интерфейса класса, определяемая разработчиком, а не пользователем, а значит, при правильном использовании дружественных функций, никто ИЗВНЕ доступа туда, куда не надо не получит...
Цитата почему нельзя для outfile передавать имя файла как string?только чар?а если я хочу что бы пользователь не задавал расширение файла,мне же проще будет написать так : Собственно, кто мешает:string filename;? Сообщение отредактировано: volvo - 31.05.2008 0:13 |
Andrewshkovskii |
![]()
Сообщение
#7
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
хм..спасибо=)
Написал тут кое-что..только почему-то не хочеть работать.. вот функция сохранения в файл : void file_save(const vector<Team>& v){ Чтения : void file_read (vector<Team>& v) Но вектор пуст.Почему?.. |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата Но вектор пуст.Почему?.. Сам не догадываешься? Чему равен размер вектора при начале операции чтения из файла? 0... А ты поставил условие i < v.size(), которое сразу же НЕ выполняется...Читать из файла надо, пока ФАЙЛ не закончится, а не зависеть от размера вектора... |
Andrewshkovskii |
![]()
Сообщение
#9
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Спасибо и в этот раз...надо всетаки нормально в Лафоре прочитать про потоки и файлы..
Добавлено через 13 мин. бжж..опять.. Функции : void file_save(const vector<Team>& v){ В принципе,записываются данные в файл нормально. А читаются..видимо в один string(TeamName) заноситься сразу вся информация из файла..как этого избежать?. |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Я ж тебя просил привести пример файла, из которого читаешь информацию... Или показывай, как заполняешь вектор данными, чтобы можно было проверить именно на том файле, который записывается через file_save()...
|
Andrewshkovskii |
![]()
Сообщение
#11
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
содержимое файла :
team11236team21236 Как заполняю вектор?а разве в file_read не написано?или я вопрос не понял ? :
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Нет, так не пойдет... Надо разделять данные... Хотя бы пробелами
![]() Смотри: team.h #ifndef TEAM_H_ main.cpp ... Вот так... Сообщение отредактировано: volvo - 31.05.2008 21:41 |
Andrewshkovskii |
![]()
Сообщение
#13
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Спасибо за помощь!Но всеравно не много не понимаю пока..ну разберусь.У меня теперь новый вопрос
![]() Допустим,имеется какой-то класс с полями int и string.И есть вектор этих объектов v. Я хочу отсортировать вектор с помощью алгоритма sort() по заданным параметрам,т.е сортировка по i (в порядке возрастания,или убывания), сортировка по str (так же,в порядке возрастания и убывания).Понятно,что для этих типов определен оператор < и оператор >. Но,если я просто вызову функция sort(v.begin(),v.end()); ,то будет ошибка.Так вот, надо ли мне,определять предикат сортировки для каждого из параметров? Допустим вот так :
Будет ли это правильно? 2ой вопрос : допустим,имеется клас Team class Team и класс Player : class Player Необходимо,что бы при вводе поля team, происходила проверка : имеется ли данная команда в векторе класса Team.Т.е.,вводим ли мы реально существующую команду,к которой принадлежит игрок или нет. С помощью какого алгоритма stl можно сделать данную проверку?find,search или же проще и лучше написать самому(это то я понимаю как написать,но хочется освоить stl алгоритмы)?Если можно,приведите,пожалуйста,пример. Сообщение отредактировано: Andrewshkovskii - 31.05.2008 17:33 |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата надо ли мне,определять предикат сортировки для каждого из параметров? Да, если ты хочешь иметь возможность сортировать вектор по нескольким разным полям...Цитата С помощью какого алгоритма stl можно сделать данную проверку?find,search или же проще и лучше написать самому Гораздо проще будет написать самому...Update Хотя... Я тут посмотрел на то, что сделал вчера - есть небольшое добавление, я внес исправления в пост №12, в реализацию operator >> для класса Team. С учетом этого, можно сделать и с помощью алгоритма find_if: 1. Описываем в классе Team константный метод class Team { 2. Описываем также еще одну структуру: struct check 3. И теперь проверка делается так: ... Сообщение отредактировано: volvo - 31.05.2008 21:48 |
Andrewshkovskii |
![]()
Сообщение
#15
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 222 Пол: Мужской Реальное имя: Andrew Репутация: ![]() ![]() ![]() |
Ну я отсутствовал в инете пару дней..когда ты сказал проще самому написать,я написал..Только почему-то циклиться,а почему - не пойму.Возможно гдето-то с параметрами напутал..вот такая картина :
void input_p (vector<Player>& v,const vector<Team>& vt) вроде подправил,надо было поток очистить.. пипеец..и функция вызывал ДО ввода команды..идиот..простите ![]() Сообщение отредактировано: Andrewshkovskii - 2.06.2008 19:19 |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Насколько я вижу - вот так будет лучше:
bool exsist_c (string& club, const vector<Team>& vt ) {Это первое... Второе - вопрос на засыпку: зачем ты передаешь ob в AddOne_p()? Можно же не тянуть его извне, а описывать прямо внутри этой функции, ты ж все равно не пользуешься (да и не сможешь, передается-то объект не по ссылке, а по значению) введенными данными в самой функции input_p()... |
![]() ![]() |
![]() |
Текстовая версия | 16.08.2025 2:00 |