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

Передвинуть элементы в массиве указателей на объекты fstream - C++

Восстановить пароль Регистрация
 
snowleo
14 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 15
17.06.2014, 01:37     Передвинуть элементы в массиве указателей на объекты fstream #1
Здравствуйте. Есть прога в которой одновременно надо обрабатывать до 10 файлов. Для этого создан массив указателей на fstream. Проблема такая: при закрытии, например 4-го файла, надо в массиве указателей на файлы сдвинуть элементы к началу массива, начиная с 4 позиции. То есть:
C
1
2
3
4
5
6
fstream fList[10]; //массив указателей на файлы
 
...........................
 
for (int i = 4; i < 10; i++)
      fList[i] = flist[i + 1];
В классе fstream не определен оператор присваивания, так что такой вариант не работает.
Как правильно реализовать этот кусок кода?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2014, 01:37     Передвинуть элементы в массиве указателей на объекты fstream
Посмотрите здесь:

C++ Массив указателей на объекты подклассов
Указатель на массив указателей на объекты, передать в метод объекта C++
C++ как понять: массив указателей на объекты классов?
C++ Виртуальные функции (создать массив указателей на объекты трех классов)
Массивы указателей на объекты как данные класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.06.2014, 01:43     Передвинуть элементы в массиве указателей на объекты fstream #2
Цитата Сообщение от snowleo Посмотреть сообщение
Для этого создан массив указателей на fstream.
И где он? Вот это не массив указателей:
Цитата Сообщение от snowleo Посмотреть сообщение
fstream fList[10];
snowleo
14 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 15
17.06.2014, 01:54  [ТС]     Передвинуть элементы в массиве указателей на объекты fstream #3
То есть надо использовать:
C
1
fstream *fList = new fstream[10];
или же:
C
1
fstream **fList = new fstream*[10];
Какой из вариантов?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.06.2014, 01:59     Передвинуть элементы в массиве указателей на объекты fstream #4
Цитата Сообщение от snowleo Посмотреть сообщение
То есть надо использовать:
fstream *fList = new fstream[10];
Это то же самое (не массив указателей), но в динамической памяти.

Добавлено через 2 минуты
Цитата Сообщение от snowleo Посмотреть сообщение
или же:
Можно так, можно сяк:
C++
1
fstream* fList[10];
snowleo
14 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 15
17.06.2014, 02:07  [ТС]     Передвинуть элементы в массиве указателей на объекты fstream #5
Ок. Подскажите, как дальше пользоваться этой конструкцией для работы с файлами?
Что-то типа:
C
1
2
3
4
5
6
7
fstream **fList = new fstream*[10];
 
//открытие файла
fList[0]->open("1.txt");
 
//вывод в файл
*fList[0]<<"test";
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
17.06.2014, 02:13     Передвинуть элементы в массиве указателей на объекты fstream #6
Цитата Сообщение от snowleo Посмотреть сообщение
как дальше пользоваться этой конструкцией для работы с файлами?
...
Цитата Сообщение от snowleo Посмотреть сообщение
Что-то типа:
snowleo
14 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 15
17.06.2014, 02:21  [ТС]     Передвинуть элементы в массиве указателей на объекты fstream #7
Ладно. Основной вопрос был-как передвинуть элементы в массиве?
C
1
2
3
4
for (int j = 4; j < 10; j++)
{
     fList[j] = fList[j + 1];
}
Такой вариант, на сколько я понял, не верен. Так как же правильно?
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
17.06.2014, 02:24     Передвинуть элементы в массиве указателей на объекты fstream #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Правильно - использовать std::vector и вызывать метод erase. Или std::move, если уж вектор не по нраву.
snowleo
14 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 15
17.06.2014, 02:31  [ТС]     Передвинуть элементы в массиве указателей на объекты fstream #9
Смысл в том, чтобы сохранить порядок следования файлов, так как индекс связан с другим списком, в котором после удаления элемента из середины, остальные элементы сдвигаются к началу, занимая освободившееся место.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
17.06.2014, 02:34     Передвинуть элементы в массиве указателей на объекты fstream #10
И? erase/std::move по вашему порядок следования как-то меняет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2014, 02:38     Передвинуть элементы в массиве указателей на объекты fstream
Еще ссылки по теме:

C++ динамический массив указателей на объекты
Привсоение масиву указателей объекты без имени C++
Массив указателей на объекты C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
snowleo
14 / 0 / 0
Регистрация: 17.06.2014
Сообщений: 15
17.06.2014, 02:38  [ТС]     Передвинуть элементы в массиве указателей на объекты fstream #11
Renji, все понял. Большое спасибо!
Yandex
Объявления
17.06.2014, 02:38     Передвинуть элементы в массиве указателей на объекты fstream
Ответ Создать тему
Опции темы

Текущее время: 16:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru