Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для tramp_1-3
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454

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

23.07.2013, 12:21. Показов 1878. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
продолжение этой темы, но с другой проблемой. Ошибка в программе, читающей файлы
Пишу программу, которая принимает произвольное количество файлов с записями на вход и в конечном счете выводит эти записи отсортированные в последний принятый файл. Это неокончательный вариант программы, тут я пытаюсь загнать все записи в один контейнер-вектор.
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;
};
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2013, 12:21
Ответы с готовыми решениями:

Не могу разобраться, почему элемент должен добавляться в начало списка, а добавляется как второй элемент
uses SysUtils,windows; type List=^Ukasatel; Ukasatel = record el:integer; next:List end; Var L,p:List;...

не добавляется вектор в Vector Table при компиляции на С++
Приветствую. Такая странная ситуация: При компиляции на С++ не добавляется вектор в таблицу векторов. При компиляции на Си все ок. ...

Объект структуры добавляется в вектор через push_back только со второго раза
Создал объект структуры и заполняю его из формы. Потом добавляю в вектор через push_back, в итоге при нажатии &quot;добавить&quot; первый...

8
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.07.2013, 14:59
Зачем вот это:
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;
};
2
 Аватар для tramp_1-3
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
24.07.2013, 05:34  [ТС]
Цитата Сообщение от 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);
        };
Спасибо большое!
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2013, 12:08
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
Полный приведеный вами листинг не робит (скорее всего количество строк не подсчитывается),
Да нет, там всё правильно подсчитывает. Если бы у меня не работал, то я бы не выложил код. Ваших файлов нет, чтобы проверить, может дело в этом.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2013, 12:23
Два файла: 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
На скрине результат. По-моему, всё правильно отработало.
Миниатюры
Почему не добавляется элемент в вектор?  
1
 Аватар для Cmehotron
3 / 3 / 0
Регистрация: 02.05.2013
Сообщений: 40
24.07.2013, 15:24
alsav22, а можно код показать, а то у меня таки с векторами ничего пока не фурычит
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2013, 15:27
Цитата Сообщение от Cmehotron Посмотреть сообщение
а можно код показать
2 пост.
1
 Аватар для tramp_1-3
16 / 16 / 1
Регистрация: 13.10.2012
Сообщений: 454
24.07.2013, 20:35  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Да нет, там всё правильно подсчитывает. Если бы у меня не работал, то я бы не выложил код. Ваших файлов нет, чтобы проверить, может дело в этом.
С файлами всё отлично, эту ошибку я исправил, прошу помочь с другой проблемой в этой же программе Вывод контейнера типа set <string> в файл
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
24.07.2013, 22:47
Нужны файлы и то, что вводите в командной строке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2013, 22:47
Помогаю со студенческими работами здесь

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

Почему не добавляется button?
Не добавляется кнопка на форму. Подскажите что не так.. private void button1_Click(object sender, EventArgs e) { ...

Дана матрица A и вектор B порядка N. Поулчить вектор С, i-ый элемент которого..
Уважаемые форумчане) Помогите написать пожалуйста =) Дана матрица A и вектор B порядка N. Поулчить вектор С, i-ый элемент...

Почему 2 раза добавляется в listView ?
Подскажите почему число 2 раза добавляется в ListView ? void ListView2CriticalIndicators () // Метод получающий максимальное число ват...

Почему не добавляется пункт в Combobox?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru