Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24

Непонятно, как работает push_back

06.09.2013, 16:25. Показов 14920. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задали на неделю сделать программы, где нужно использовать std::vector. Сами алгоритмы для них я продумала (для второй программы он точно должен работать), но у меня возникли проблемы с командой push_back.

1) Не совсем первая программа, но код, который к ней сводится (и в нём та же проблема):

C++
1
2
3
4
5
    vector<char> h; char q;
 
    q=')';
    h.push_back(q);
    if(h.empty()) printV(h); else cout<<"ERROR"<<endl;
Судя по тому, что мне в ответ выводится "ERROR", команда push_back не записала символ q.

2) Кусок кода программы, которая сначала требует ввести число учеников, потом имя каждого ученика (вводится список по рейтингу), а затем сортирует их в алфавитном порядке.

C++
1
2
3
4
5
6
7
8
9
    unsigned int N; vector<rate> Sigma;
 
    cin>>N;
    for(unsigned int i=1;i<=N;i++){
        string o;
 
        getline(cin,o);
        Sigma.push_back(make_pair(o,i));
    }
Какое бы N у меня ни было, первый ученик почему-то оказывается безымянным, то есть строка, содержащая его имя, остаётся пустой.

А теперь вопрос: где у меня ошибки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2013, 16:25
Ответы с готовыми решениями:

програ работает непонятно как
#include &lt;iostream&gt; #include &lt;cctype&gt; using namespace std; int main() { short int count=0; char ch('Y'); while (ch != 'q'...

Непонятно работает функция - член класса
Задача создать телефонный справочник с использованием бинарного дерева. Проблема возникает при попытке найти абонента по имени. Создал...

Непонятно работает метод valarray<int>.sum()
Создал класс который хранит данные в типе valarray&lt;int&gt;. Нужно чтобы выводилась сумма значений что там хранятся. Использовал функцию...

10
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
06.09.2013, 16:30
Цитата Сообщение от MatMatRix Посмотреть сообщение
if(h.empty()) printV(h); else cout<<"ERROR"<<endl;
else означает что h не пуст так как не выполнилось условие h.empty()
1
 Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
06.09.2013, 16:33  [ТС]
Цитата Сообщение от Raali Посмотреть сообщение
else означает что h не пуст так как не выполнилось условие h.empty()
Спасибо! Так, с командой empty разобралась. Сейчас попробую первую прогу доделать. Теперь осталась вторая.
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
06.09.2013, 16:34
Цитата Сообщение от MatMatRix Посмотреть сообщение
первый ученик почему-то оказывается безымянным
а где и как вы это определяете?
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.09.2013, 16:45
Может ошибка в структуре rate? К примеру, вот так должно все работать:
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
#include <iostream>
#include <string>
#include <vector>
 
struct rate
{
   std::string name;
   int rating;
 
   rate(const std::string& s, int r): name(s), rating(r) {}
};
 
int main()
{
   std::vector<rate> Sigma;
   std::string name;
   unsigned int N;
   (std::cin >> N).get();
   for(unsigned int i = 0; i<N; ++i)
   {
      std::cout << "Enter name: ";
      std::getline(std::cin, name);
      Sigma.push_back(rate(name, i));
   }
   for(std::vector<rate>::iterator it = Sigma.begin(); it != Sigma.end(); ++it)
      std::cout << (*it).name << ", " << (*it).rating << std::endl;
 
   std::cout << "\nDone" << std::endl;
   return 0;
}
0
 Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
06.09.2013, 17:40  [ТС]
Может ошибка в структуре rate? К примеру, вот так должно все работать:
Понимаете, в чём дело... Прошу прощения, что я сразу не сказала, но мне нужно непременно использовать структуру pair, которая определяется просто: template<class T1, class T2> struct pair{T1 first; T2 second}. Попытки вместо string в первую переменную пары, которую я обозначила как rate (чисто для удобства), запихнуть const string& оборачиваются кучей ругани от Visual C++ с указанием непосредственно в код, где эти pair определены.

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
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
 
typedef pair<string, unsigned int> rate;
 
void ShowMeStudents(vector<rate> &v){
    for(unsigned int a=0;a<v.size();a++){
        cout<<v[a].first<<" "<<"("<<v[a].second<<")"<<endl;
    }
    cout<<endl;
}
 
int main(){
    unsigned int N; vector<rate> Sigma; string o;
 
    cin>>N;
    for(unsigned int i=1;i<=N;i++){
        getline(cin,o);
        Sigma.push_back(rate(o,i));
    }
    sort(Sigma.begin(),Sigma.end());
    ShowMeStudents(Sigma);
    return 0;
}
Вот как моя прога сейчас выглядит. Кстати, к вопросу:

а где и как вы это определяете?
Я в код вписала тестовую строчку, выводящую единицу во время выполнения каждой итерации в цикле, из чего я заметила, что на первой итерации компилятор как будто вообще не знает о строке ничего. Откуда это, я понять не могу.
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
06.09.2013, 17:46
нужна реализация класса pair
rate(o,i) - точнее вот этого конструктора pair(T1,T2)
0
 Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
06.09.2013, 17:50  [ТС]
нужна реализация класса pair
rate(o,i) - точнее вот этого конструктора pair(T1,T2)
Вот так определяется "пара" (частный случай struct):

C++
1
2
3
4
5
6
7
pair<T1, T2>
 
template <class T1, class T2> struct pair
{
    T1 first;
    T2 second;
};
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
06.09.2013, 17:54
по всей видимости нужно так

C++
1
2
3
4
5
6
7
8
template<class T1, class T2> struct pair
{
T1 first;
T2 second;
 
pair(T1 f,T2 s) : first(f), second(s) {}
 
};
а в коде элемент добавлять пару так

rate *r = new rate(o,i);
Sigma.push_back(*r);
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.09.2013, 18:05
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
#include <iostream>
#include <string>
#include <vector>
 
typedef std::pair<std::string, unsigned int> rate;
 
void ShowMeStudents(const std::vector<rate>& v)
{
    for(unsigned int i = 0; i<v.size(); ++i){
        std::cout << v[i].first << " " << "(" << v[i].second << ")" << std::endl;
    }
    std::cout << std::endl;
}
 
int main()
{
   std::vector<rate> Sigma;
   std::string name;
   unsigned int N;
   (std::cin >> N).get();
   for(unsigned int i = 0; i<N; ++i)
   {
      std::cout << "Enter name: ";
      std::getline(std::cin, name);
      Sigma.push_back(std::make_pair(name, i));
   }
   ShowMeStudents(Sigma);
 
   std::cout << "\nDone" << std::endl;
   return 0;
}
Добавлено через 5 минут
Сортировка по имени:
C++
1
2
std::sort(Sigma.begin(), Sigma.end(), [](const rate& r1, const rate& r2) 
{return r1.first < r2.first;});
1
 Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
06.09.2013, 18:16  [ТС]
Цитата Сообщение от DiffEreD Посмотреть сообщение
C++
1
#include <iostream> ...
Спасибо Вам огромное! (Так всё дело было в make_pair и (cin>>N).get!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2013, 18:16
Помогаю со студенческими работами здесь

Сравнение двух строк и присвоение числа [непонятно работает]
Здравствуйте, Что то я не могу понять, вот есть такой простой код: string names = &quot;ActiveSheet&quot;; int parametr =...

Как через push_back заполнить вектор векторов?
Как через push_back заполнить вектор векторов? просто вектор например так: for(int i=0;i&lt;100;i++) ...

Как положить в вектор структур значение через push_back
есть вот такой вектор vector&lt;struct&lt;Point&gt;&gt; в структуре point , есть координата икс. struct Point { double Point_x; ...

Непонятно как работает switch
Есть вост такая конструкция switch (rand) { case 0: if (maps.getValue() &amp;&amp;...

Передача self в функцию, как-то непонятно работает.
Есть примерно такая конструкция: function some() { var self = this; self.boolVar = true; ... $( 'body' ).on( 'click',...


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

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

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru