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

Забекапить и восстановить вектор из файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Матрица http://www.cyberforum.ru/cpp-beginners/thread268876.html
Дана квадратная матрица. Поменять последние элементы каждого столбца с элементами главной диагонали.
C++ Процедуры и функции. Общие вопросы. Раньше изучал Паскаль теперь решил попробовать С++. В Паскале если описать процедуру так procedure example (var A:char; B:char); то внутри процедуры переменную "А" мы можем изменять, а переменную "B" нет. Как этот механизм выглядит в С++? http://www.cyberforum.ru/cpp-beginners/thread268873.html
C++ Двумерные массивы
Дана прямоугольная матрица. Опpеделить: 1. количество строк, среднее арифметическое элементов которых меньше заданной величины(n с клавиатуры) 2. уплотнить заданную матрицу, удаляя из нее строки и столбцы, содеpжащие нечетные элементы Язык обычный СИ.
C++ Класс
Есть класс: class a { public: int i = 4; browser br; }; Как сделать чтобы при создании объекта класса, объект br создавался не сразу, а только при присвоении: a cl; cl.br = ...;
C++ Формула в формате C/C++ http://www.cyberforum.ru/cpp-beginners/thread268849.html
Формула в формате C/C++ Помогите пожалуйста переделать формулу на картинке в формат с++. Буду очень благодарна!
C++ Деление пополам(бинарный поиск) Всем доброго времени суток! уже часа 2 ломаю голову над проблемой: комьютер должен отгадать число за 10 или менее вопросов в диапозоне от 1 до 1000 применить идею методом деления пополам(бинарного поиска) хотя что это такое бинарный поиск я понятия неимею... намекните примерно как это реализовать чуть ли не забыл... реализовать надо на борланде 3.1 подробнее

Показать сообщение отдельно
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
03.04.2011, 17:20     Забекапить и восстановить вектор из файла
Kadet89, собственно о чем я и говорил в последнем посте
myInput работает верно только в том случае , когда действительный размер хранилища вектора в байтах равен тому, сколько байтов будет считано из файла( или хотя бы не меньше ). Насчет того, что файл не создается - у меня вот создается и всё хорошо, здесь хз. По поводу того, что не восстанавливается вектор, проследим работу вашей программы и всё станет сразу ясно:

1) Сначала day_us и vost содержат 10 и 5 нулевых элементов соответственно( resize'ы ), то есть фактический размер их -- 10 и 5.
2) Вы забиваете в day_us еще 5 элементов, то есть day_us.size() == 15
3) Вы вызываете reserve для обоих векторов - это выделяет память под хранилище обоих векторов на 250 элементов, но действительные размеры векторов остались по-прежнему 15 и 5.
4) С myOutput должно быть всё ясно
5) После myInput в vost нормально копируются 15 элементов( потому что вы зарезервировали место под 250 элементов), которые были в day_us, но их вы не увидите, так как реальный размер контейнера остался неизменным и равен по-прежнему 5!

Ошибки при myInput не будет , так как хоть и размер вектора равен 5, но память дальше еще есть выделенная. Тем не менее, при выводе вектора vost выведутся только первые 5 элементов , так как vost.size() == 5, о чем я и скачал в самом начале: действительный размер ( vost.size() должен быть равен размеру day_us.size() на момент вызова myInput ). В любом случае для решения данной проблемы можно просто откорректировать размеры vost, чтобы он был такой же большой , как и day_us, соответствующим вызовом resize, только на нужный размер.

Добавлено через 4 минуты
Короче, когда крутите такие штуки со стандартными контейнерами, никогда не забывайте, что потенциально можете нарушить целостность контейнера, то есть его внутреннее состояние, что может фатально сказаться на работе контейнера и программы вцелом, например как здесь : вектор vost не знает свой действительный размер(элементов-то вроде и 15, но vost.size() равен 5 ).
 
Текущее время: 22:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru