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

Почему не добавляется элемент в вектор? - C++

Восстановить пароль Регистрация
 
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
23.07.2013, 12:21     Почему не добавляется элемент в вектор? #1
продолжение этой темы, но с другой проблемой. Ошибка в программе, читающей файлы
Пишу программу, которая принимает произвольное количество файлов с записями на вход и в конечном счете выводит эти записи отсортированные в последний принятый файл. Это неокончательный вариант программы, тут я пытаюсь загнать все записи в один контейнер-вектор.
tempset заполняется нормально, но вот copy (lists.at (i).begin (), lists.at (i).end (), output); ничего не выдает, в чем дело?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <algorithm>
#include <string>
#include <iterator>
#include <set>
#include <fstream>
#include <cstdlib>
#include <vector>
 
using std :: vector;
using std :: set;
using std :: cout;
using std :: cin;
using std :: string;
using std :: cerr;
using std :: ifstream;
using std :: ofstream;
 
int main (int argc, char * argv []) {
    if (argc == 1) {
        cerr << "Usage: files for input, last for output\n";
        exit (1);
    };
    ifstream in;
    ofstream out;
    int quantity = argc - 2;         //êîëè÷åñòâî ГґГ*éëîâ
    int * entries = new int [quantity];   //Г¬Г*Г±Г±ГЁГў, Гў êîòîðîì õðГ*Г*ГЁГІГ±Гї êîëè÷åñòâî Г§Г*ГЇГЁГ±ГҐГ© (ñòðîê) Гў ГЄГ*æäîì ГґГ*éëå
    for (int i = 0; i < quantity; i++)
        entries [i] = 0;
    char ch;
    for (int i = 0; i < quantity; i++) {    //ïîäñ÷¸ò êîëè÷åñòâГ* Г§Г*ГЇГЁГ±ГҐГ© Гў ГЄГ*æäîì ГґГ*éëå
        in.open (argv [i + 1]);
        while (in.get (ch))
            if ( in.peek () == '\n')
                entries [i]++;
        in.clear ();
        in.close ();
    };
    std :: ostream_iterator <string>  output (cout, "\n");
    vector <set <string> > lists (quantity);    //ГЄГ®Г*ГҐГ·Г*ûé Г¬Г*Г±Г±ГЁГў Г§Г*ГЇГЁГ±ГҐГ©
    for (int i = 0; i < quantity; i++) {        //ïðî÷èòГ*ГІГј ГўГ±ГҐ ГґГ*éëû, êðîìå ïåðâîãî ГЁ ïîñëåäГ*ГҐГЈГ®
        in.open (argv [i + 1]);                     //Гі âõîäГ*îãî argv [i] ГґГ*éëГ* entries[i - 1] ñòðîê
        set <string> tempset;                   //âðåìåГ*Г*ûé ñïèîê äëÿ õðГ*Г*ГҐГ*ГЁГї ГІГҐГЄГіГ№ГҐГЈГ® îáðГ*ГЎГ*òûâГ*åìîãî ГґГ*éëГ*
        for (int j = 0; j < entries[i]; j++) {  // ïðî÷èòГ*ГІГј ГўГ±ГҐ ñòðîêè argv [i] ГґГ*éëГ*            
            char items [100];       //âðåìåГ*Г*Г*Гї ñòðîêГ* äëÿ õðГ*Г*ГҐГ*ГЁГї ГІГҐГЄГіГ№ГҐГ© îáðГ*ГЎГ*òûâГ*åìîé ñòðîêè
            int it = 0;
            while (in.get (ch) && ch != '\n')
                items [it++] = ch;
            string tempstr (items);
            tempset.insert (tempstr);
        };
        //copy (tempset.begin (), tempset.end (), output);
        lists.push_back (tempset);
        copy (lists.at (i).begin (), lists.at (i).end (), output);
        in.clear ();
        in.close ();
    };
    copy (lists [0].begin (), lists [0].end (), output);
    system ("pause");
    return 0;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.07.2013, 14:59     Почему не добавляется элемент в вектор? #2
Зачем вот это:
C++
1
 char items [100];
, если string используете? Если файл закрывется, то необязательно перед этим clear() делать.

Добавлено через 1 час 0 минут
Вот так попробуйте:
C++
1
vector <set <string> > lists;    //конечный массив записей
Добавлено через 11 минут
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <algorithm>
#include <string>
#include <iterator>
#include <set>
#include <fstream>
#include <cstdlib>
#include <vector>
 
using std :: vector;
using std :: set;
using std :: cout;
using std :: cin;
using std :: string;
using std :: cerr;
using std :: ifstream;
using std :: ofstream;
 
int main (int argc, char * argv []) {
    if (argc == 1) {
        cerr << "Usage: files for input, last for output\n";
        exit (1);
    };
    ifstream in;
    ofstream out;
    
    int quantity = argc - 1;         //количество файлов
    int * entries = new int [quantity];   //массив, в котором хранится количество записей (строк) в каждом файле
    for (int i = 0; i < quantity; i++)
        entries [i] = 0;
    string temp;
    for (int i = 0; i < quantity; i++) {    //подсчёт количества записей в каждом файле
        in.open (argv [i + 1]);
        while (getline(in, temp))
            entries [i]++;
        in.close ();
    };
    std :: ostream_iterator <string, char>  output (cout, "\n");
    
    vector <set <string> > lists;    //конечный массив записей
    for (int i = 0; i < quantity; i++) {        //прочитать все файлы, кроме первого и последнего
        in.open (argv [i + 1]);                     //у входного argv [i] файла entries[i - 1] строк
        set <string> tempset;                   //временный спиок для хранения текущего обрабатываемого файла
        for (int j = 0; j < entries[i]; j++) {  // прочитать все строки argv [i] файла            
            string items; //временная строка для хранения текущей обрабатываемой строки
            getline(in, items);
            tempset.insert (items);
        };
        //copy (tempset.begin (), tempset.end (), output);
        lists.push_back (tempset);
        copy (lists.at (i).begin (), lists.at (i).end (), output);
        in.close ();
    };
    
    copy (lists [0].begin(), lists [0].end(), output);
    
    system ("pause");
    return 0;
};
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
24.07.2013, 05:34  [ТС]     Почему не добавляется элемент в вектор? #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Вот так попробуйте:
Полный приведеный вами листинг не робит (скорее всего количество строк не подсчитывается), но я сам исправил цикл и объявление, теперь он вот так выглядит и идеально работает
vector <set <string> > lists;
C++
1
2
3
4
5
6
        for (int j = 0; j < entries[i]; j++) {  // ïðî÷èòГ*ГІГј ГўГ±ГҐ ñòðîêè argv [i] ГґГ*éëГ*            
            string tempstr;
            while (in.get (ch) && ch != '\n')
                tempstr += ch;
            tempset.insert (tempstr);
        };
Спасибо большое!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2013, 12:08     Почему не добавляется элемент в вектор? #4
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
Полный приведеный вами листинг не робит (скорее всего количество строк не подсчитывается),
Да нет, там всё правильно подсчитывает. Если бы у меня не работал, то я бы не выложил код. Ваших файлов нет, чтобы проверить, может дело в этом.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2013, 12:23     Почему не добавляется элемент в вектор? #5
Два файла: 11.txt и 12.txt.
11.txt:
aaa aaa
sss sss
ddd ddd
fff fff

12.txt:
vvv vvv
eee eee
rrr rrr

В конце последних строк: '\n'.
В командной строке ввожу: 500.exe 11.txt 12.txt
На скрине результат. По-моему, всё правильно отработало.
Миниатюры
Почему не добавляется элемент в вектор?  
Cmehotron
 Аватар для Cmehotron
3 / 3 / 0
Регистрация: 02.05.2013
Сообщений: 27
24.07.2013, 15:24     Почему не добавляется элемент в вектор? #6
alsav22, а можно код показать, а то у меня таки с векторами ничего пока не фурычит
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2013, 15:27     Почему не добавляется элемент в вектор? #7
Цитата Сообщение от Cmehotron Посмотреть сообщение
а можно код показать
2 пост.
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
24.07.2013, 20:35  [ТС]     Почему не добавляется элемент в вектор? #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Да нет, там всё правильно подсчитывает. Если бы у меня не работал, то я бы не выложил код. Ваших файлов нет, чтобы проверить, может дело в этом.
С файлами всё отлично, эту ошибку я исправил, прошу помочь с другой проблемой в этой же программе Вывод контейнера типа set <string> в файл
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2013, 22:47     Почему не добавляется элемент в вектор?
Еще ссылки по теме:

C++ Не получается вставить элемент в вектор
Вектор: вставить новый элемент после последнего положительного C++
Не добавляется элемент списка C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2013, 22:47     Почему не добавляется элемент в вектор? #9
Нужны файлы и то, что вводите в командной строке.
Yandex
Объявления
24.07.2013, 22:47     Почему не добавляется элемент в вектор?
Ответ Создать тему
Опции темы

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