Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/76: Рейтинг темы: голосов - 76, средняя оценка - 4.89
 Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
1

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

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

Author24 — интернет-сервис помощи студентам
Задали на неделю сделать программы, где нужно использовать 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;...

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

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

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

10
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
06.09.2013, 16:30 2
Цитата Сообщение от 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  [ТС] 3
Цитата Сообщение от Raali Посмотреть сообщение
else означает что h не пуст так как не выполнилось условие h.empty()
Спасибо! Так, с командой empty разобралась. Сейчас попробую первую прогу доделать. Теперь осталась вторая.
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
06.09.2013, 16:34 4
Цитата Сообщение от MatMatRix Посмотреть сообщение
первый ученик почему-то оказывается безымянным
а где и как вы это определяете?
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
06.09.2013, 16:45 5
Может ошибка в структуре 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  [ТС] 6
Может ошибка в структуре 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 7
нужна реализация класса pair
rate(o,i) - точнее вот этого конструктора pair(T1,T2)
0
 Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
06.09.2013, 17:50  [ТС] 8
нужна реализация класса 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 9
по всей видимости нужно так

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 10
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  [ТС] 11
Цитата Сообщение от DiffEreD Посмотреть сообщение
C++
1
#include <iostream> ...
Спасибо Вам огромное! (Так всё дело было в make_pair и (cin>>N).get!)
0
06.09.2013, 18:16
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.09.2013, 18:16
Помогаю со студенческими работами здесь

Как через push_back заполнить вектор векторов?
Как через push_back заполнить вектор векторов? просто вектор например так: for(int...

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru