С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Cortwave
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 6
#1

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

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

В программе мне требуется иметь доступ одновременно к большому количеству файлов ( чтение ). Чтение я осуществляю через 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 02:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вектор потоков (C++):

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

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

Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы - C++
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы. Безопасный вектор определяет переменные нижний и верхний...

матрица на вектор, вроде правильно, а вектор на матрицу? посмотрите пожалуйста? - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main() { ...

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

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

11
Wolkodav
605 / 458 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.03.2013, 02:39 #2
(streams[0]).getline(/* тут что вам нужно*/);
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 02:57 #3
C++
1
2
string time;
getline (*(streams[0]) , time);
0
DiffEreD
1432 / 769 / 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);
    }
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 02:59 #5
Цитата Сообщение от Wolkodav Посмотреть сообщение
(streams[0]).getline(/* тут что вам нужно*/);
C++
1
*(streams[0]).getline(/* тут что вам нужно*/);
1
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
09.03.2013, 03:18 #6
C++
1
streams[ i ]->getline( ... );
0
Wolkodav
605 / 458 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
09.03.2013, 12:37 #7
alsav22, да забыл *
0
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);
    }
тополучается, что все время записывается строчка из последнего файла
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,173
Записей в блоге: 17
10.03.2013, 00:48 #9
А зачем вектор потоков ?
Открыл-прочитал-закрыл ...
Зачем файлы держать открытыми ?
0
Cortwave
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 6
10.03.2013, 00:51  [ТС] #10
Цитата Сообщение от Avazart Посмотреть сообщение
А зачем вектор потоков ?
Открыл-прочитал-закрыл ...
Зачем файлы держать открытыми ?
мне надо из файлов считывать первую строку, если их открывать и закрывать, то каждый раз при считывании первой строки ее придется вычеркивать и переписывать, а так при использовании getline следующий раз будет считываться первая строка
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,173
Записей в блоге: 17
10.03.2013, 01:08 #11
Так грузи весь файл целиком в vector и закрывай его ...
0
alsav22
5428 / 4823 / 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 у вас одна. Сохраняйте её куда-нибудь после каждого считывания (массив, вектор). Идеи кода не знаю, поэтому конкретно не могу подсказать.
0
10.03.2013, 04:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2013, 04:36
Привет! Вот еще темы с ответами:

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

Вектор с неизвестным количеством чисел преобразовать в другой вектор, где числа будут стоять по возрастанию - C++
Вектор с неизвестным количеством чисел нужно превратить в другой вектор, где числа будут стоять по возрастанию. Мне код не столько нужен,...

Считать вектор из файла, записать вектор в файл - C++
Доброго времени суток. Программа должна считывать числа из заданного файла, потом записывать в другой файл вектор, в котором каждый элемент...

задан вектор С, который состоит из 12 действительных чисел. Сформировать вектор D, нечетные элементы которого есть целая часть нечетных - C++
задан вектор С, который состоит из 12 действительных чисел. Сформировать вектор D, нечетные элементы которого есть целая часть нечетных...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.