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

Вектор потоков - C++

Восстановить пароль Регистрация
 
Cortwave
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 6
09.03.2013, 02:07     Вектор потоков #1
В программе мне требуется иметь доступ одновременно к большому количеству файлов ( чтение ). Чтение я осуществляю через ifstream. Сначала пробовал сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        vector <ifstream> streams;
    for ( int i = 0 ; i < num_files ; i++ )
    {
        string name;
        name += ( (char)(i+48) + ".txt" );//  имя файла, из которого будет осуществляться чтение
        streams.push_back(ifstream(name));
    }
        for ( int i = 0 ; i < num_files ; i++ )// поочередное чтение из потоков
    {
        string time;
        ifstream in;
        in = (streams[i]);
        getline ( in , time );
        buf[i] = time;
    }
На что компилятор ругался, как мне потом объяснили, потоки копировать нельзя. И предложили сделать массив ссылок на потоки.
C++
1
2
3
4
5
6
7
8
 
    vector <ifstream*> streams;
    for ( int i = 0 ; i < num_files ; i++ )
    {
        string name;
        name += ( (char)(i+48) + ".txt" );
        streams.push_back( new ifstream(name));
    }
Как мне работать с ссылками на потоки ( интересует функция getline ) ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 02:07     Вектор потоков
Посмотрите здесь:

C++ Создать иерархию классов вектор(longint) и безопасный вектор с проверкой выхода за пределы
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы C++
контейнер -вектор вложеный в вектор C++
C++ Есть квадратная матрица А порядка n и вектор b с n элементами. Получить вектор Аb.
C++ задан вектор С, который состоит из 12 действительных чисел. Сформировать вектор D, нечетные элементы которого есть целая часть нечетных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.03.2013, 02:39     Вектор потоков #2
(streams[0]).getline(/* тут что вам нужно*/);
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 02:57     Вектор потоков #3
C++
1
2
string time;
getline (*(streams[0]) , time);
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.03.2013, 02:57     Вектор потоков #4
А если так попробовать:
C++
1
2
3
4
5
6
7
8
9
    const unsigned num_files = 10;
    std::vector<std::ifstream> streams(num_files);
    for (unsigned i = 0; i<num_files; ++i)
        streams[i].open(std::string(std::to_string(i+48) + ".txt").c_str());
    for (unsigned i = 0; i<num_files; ++i)
    {
        std::string output;
        std::getline(streams[i], output);
    }
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 02:59     Вектор потоков #5
Цитата Сообщение от Wolkodav Посмотреть сообщение
(streams[0]).getline(/* тут что вам нужно*/);
C++
1
*(streams[0]).getline(/* тут что вам нужно*/);
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
09.03.2013, 03:18     Вектор потоков #6
C++
1
streams[ i ]->getline( ... );
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.03.2013, 12:37     Вектор потоков #7
alsav22, да забыл *
Cortwave
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 6
10.03.2013, 00:41  [ТС]     Вектор потоков #8
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
string time;
getline (*(streams[0]) , time);
если объявлять так
C++
1
2
3
4
5
6
7
8
        vector <ifstream*> streams;
    for ( int i = 0 ; i < num_files ; i++ )
    {
        string name;
        name += (char)(num_files+48);
        name += ".txt";
        streams.push_back( new ifstream(name) );
    }
и записывать так
C++
1
2
3
4
5
         for ( int i = 0 ; i < num_files ; i++ )
    {
        string time;
        getline(*(streams[i]),time);
    }
тополучается, что все время записывается строчка из последнего файла
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,561
Записей в блоге: 17
10.03.2013, 00:48     Вектор потоков #9
А зачем вектор потоков ?
Открыл-прочитал-закрыл ...
Зачем файлы держать открытыми ?
Cortwave
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 6
10.03.2013, 00:51  [ТС]     Вектор потоков #10
Цитата Сообщение от Avazart Посмотреть сообщение
А зачем вектор потоков ?
Открыл-прочитал-закрыл ...
Зачем файлы держать открытыми ?
мне надо из файлов считывать первую строку, если их открывать и закрывать, то каждый раз при считывании первой строки ее придется вычеркивать и переписывать, а так при использовании getline следующий раз будет считываться первая строка
Avazart
 Аватар для Avazart
6893 / 5133 / 250
Регистрация: 10.12.2010
Сообщений: 22,561
Записей в блоге: 17
10.03.2013, 01:08     Вектор потоков #11
Так грузи весь файл целиком в vector и закрывай его ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2013, 04:36     Вектор потоков
Еще ссылки по теме:

C++ Создание и завершение процессов и потоков. Приоритеты выполнения потоков
Считать вектор из файла, записать вектор в файл C++
C++ Вектор ссылок и вектор указателей

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.03.2013, 04:36     Вектор потоков #12
Цитата Сообщение от Cortwave Посмотреть сообщение
и записывать такКод C++
for ( int i = 0 ; i < num_files ; i++ )
{
string time;
getline(*(streams[i]),time);
}
то получается, что все время записывается строчка из последнего файла
Естественно, ведь time у вас одна. Сохраняйте её куда-нибудь после каждого считывания (массив, вектор). Идеи кода не знаю, поэтому конкретно не могу подсказать.
Yandex
Объявления
10.03.2013, 04:36     Вектор потоков
Ответ Создать тему
Опции темы

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