0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 6
1

Вектор потоков

09.03.2013, 02:07. Показов 2391. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В программе мне требуется иметь доступ одновременно к большому количеству файлов ( чтение ). Чтение я осуществляю через 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 ) ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2013, 02:07
Ответы с готовыми решениями:

Создание и завершение процессов и потоков. Приоритеты выполнения потоков
Здравствуйте. Буду очень раз если поможете понять,что конкретно нужно сделать в вот этом...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют...

Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы. Безопасный...

матрица на вектор, вроде правильно, а вектор на матрицу? посмотрите пожалуйста?
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace...

11
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
09.03.2013, 02:39 2
(streams[0]).getline(/* тут что вам нужно*/);
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 02:57 3
C++
1
2
string time;
getline (*(streams[0]) , time);
0
1458 / 795 / 257
Регистрация: 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);
    }
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 02:59 5
Цитата Сообщение от Wolkodav Посмотреть сообщение
(streams[0]).getline(/* тут что вам нужно*/);
C++
1
*(streams[0]).getline(/* тут что вам нужно*/);
1
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
09.03.2013, 03:18 6
C++
1
streams[ i ]->getline( ... );
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
09.03.2013, 12:37 7
alsav22, да забыл *
0
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);
    }
тополучается, что все время записывается строчка из последнего файла
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.03.2013, 00:48 9
А зачем вектор потоков ?
Открыл-прочитал-закрыл ...
Зачем файлы держать открытыми ?
0
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 6
10.03.2013, 00:51  [ТС] 10
Цитата Сообщение от Avazart Посмотреть сообщение
А зачем вектор потоков ?
Открыл-прочитал-закрыл ...
Зачем файлы держать открытыми ?
мне надо из файлов считывать первую строку, если их открывать и закрывать, то каждый раз при считывании первой строки ее придется вычеркивать и переписывать, а так при использовании getline следующий раз будет считываться первая строка
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
10.03.2013, 01:08 11
Так грузи весь файл целиком в vector и закрывай его ...
0
5498 / 4893 / 831
Регистрация: 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 у вас одна. Сохраняйте её куда-нибудь после каждого считывания (массив, вектор). Идеи кода не знаю, поэтому конкретно не могу подсказать.
0
10.03.2013, 04:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2013, 04:36
Помогаю со студенческими работами здесь

Почему матрица на вектор умножается быстрее чем вектор на матрицу?
Почему матрица на вектор умножается быстрее чем вектор на матрицу?

Есть квадратная матрица А порядка n и вектор b с n элементами. Получить вектор Аb.
Привет. Не могу разобратся, вот задание: Есть квадратная матрица А порядка n и вектор b с n...

Даны квадратная матрица A порядка n и вектор b c n элементами. Получить вектор: A^2b
Даны квадратная матрица A порядка n и вектор b c n элементами. Получить вектор: A^2b. Помогите...

Создать иерархию классов вектор(longint) и безопасный вектор с проверкой выхода за пределы
Помогите не знаю как сделать! Создать иерархию классов вектор(longint) и безопасный вектор с...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru