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

итератор - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сумма цифр натурального числа посредством рекурсии http://www.cyberforum.ru/cpp-beginners/thread290959.html
Необходимо найти сумму цифр натурального числа используя отдельную функцию с рекурсией. Пару программ писал на простое нахождение суммы цифр натурального числа, а как должно выглядеть с рекурсией - не понимаю. Помогите пожалуйста.
C++ двоичная система перевод из десятичной в двоичную скажите как записать результат в обратном порядке!! #include <iostream> #include <string> using namespace std; void fuck(const int num, string &snum){ if (num%2==0) snum+="0"; http://www.cyberforum.ru/cpp-beginners/thread290954.html
Составить программу подсчитывающую число посещений в поликлинике врачей-специалистов (отоларинголога, окулиста и хирурга) C++
3. Составить программу подсчитывающую число посещений в поликлинике врачей-специалистов (отоларинголога, окулиста и хирурга). В конце дня выдавать итоговое сообщение. В начале работы программы должна вводиться дата, которая будет фигурировать в итоговом сообщении. Использовать множественный выбор.
C++ Составить программу для обработки результатов кросса на 500 м для женщин.
Составить программу для обработки результатов кросса на 500 м для женщин. В кроссе участвует не более 100 студенток. Для каждой участнице ввести фамилию, цифр группы фамилию преподавателя, результат получить результирующую таблицу, упорядоченную по результатам, в которой содержится также информацию о выполнении нормы ГТО. Определить суммарное количество студенток, выполнивших норму ГТО.
C++ Просмотр текстого файла в графическом режиме. http://www.cyberforum.ru/cpp-beginners/thread290945.html
Прошу помошь( .Необходимо написать программу,которая выводит текстовый файл в графическом режиме,так же необходимо осуществить скроллинг.
C++ namespace, local namespace здраствуйте! прочитал в одной книжке, что "определение неименнованного пространства имён локально для специфического файла и никогда не охватывает несколько файлов" исходя из предыдущего утверждения #ifndef MODULE_H #define MODULE_H #include <fstream> #include <set> #include <string> подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
08.05.2011, 11:00     итератор
Да. В твоем классе поле t отсутствует.
вот тебе пример - переделаешь для себя

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class LongLong
{   public:
    // Конструкторы
    LongLong(const string &s);          // инициализация строкой
    LongLong(const long &number=0);
// операции c с присваиванием
    LongLong& operator+=(const LongLong &r);
    LongLong& operator-=(const LongLong &r);
    LongLong& operator*=(const LongLong &r);
    LongLong& operator/=(const LongLong &r);
    LongLong& operator%=(const LongLong &r);
// операции без присваивания
    friend LongLong operator+(const LongLong &l, const LongLong &r);
    friend LongLong operator-(const LongLong &l, const LongLong &r);
    friend LongLong operator*(const LongLong &l, const LongLong &r);
    friend LongLong operator/(const LongLong &l, const LongLong &r);
    friend LongLong operator%(const LongLong &l, const LongLong &r);
// ввод – вывод
    friend istream& operator>>(istream &is, LongLong &r);
    friend ostream& operator<<(ostream &os, const LongLong &r);
private:
    vector<char> v;
};
Помимо приведенных дружественных операций можно добавить еще операции длинных чисел с целыми, например
C++
1
2
friend LongLong operator+(const LongLong &l, const long &r);
friend LongLong operator+(const long &l, const LongLong &r);
Само число находится в поле-контейнере. Каждая цифра — это один элемент вектора, младшая цифра расположена в контейнере по младшему индексу. Например, число 765 будет расположено так: v[0]=5,v[1]=6,v[2]=7.
Конструкторов всего два: конструктор копирования создается автоматически, а конструктор без аргументов нам просто не нужен, так как в конструкторе инициализации задан аргумент по умолчанию. Реализацию покажем на примере конструктора с аргументом-целым (листинг 11.18).
C++
1
2
3
4
5
6
7
8
9
10
Листинг 11.18. Конструктор инициализации длинного целого
LongLong::LongLong(const long &number)
{  long t = number, i = 0; 
   char digit;
   while(t>0)
   { digit = t % 10;
     v.push_back(digit);
     t/=10; i++;
   }
}
Операции с длинными числами, естественно, выполняются поэлементно. Покажем реализацию самого простого метода — сложения с присваиванием (листинг 11.19).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Листинг 11.19. Метод сложения с присваиванием
LongLong& LongLong::operator+=(const LongLong &r)
{ typedef vector<char>::size_type sizeT;
  sizeT size = (v.size()>r.v.size())?v.size():r.v.size();   // большая длина
  unsigned carry = 0, sumDigit;             // перенос и цифра суммы
  LongLong Summa;                           // результат-сумма
  for(sizeT i = 0; i < size; i++)
  { sumDigit = digit(i) + r.digit(i) + carry;
    carry = sumDigit/10;                    // вычисляем новый перенос
    Summa.v.push_back(sumDigit%10);         // добавляем цифру в сумму
  }
  if (carry) Summa.v.push_back(carry);      // добавляем последний перенос
  v = Summa.v;
  return *this;
}
Нам потребовалась вспомогательная функция digit(), которая выдает очередную цифру длинного целого. Функция очень проста и ее реализацию можно прописать непосредственно в приватной части класса:
C++
1
2
char digit(unsigned i) const
{ if(i<v.size()) return v[i]; else return 0; }
Ну, и наконец, реализация функции вывода тоже тривиальна:
C++
1
2
3
4
5
ostream& operator<<(ostream &os, const LongLong &r)
{ for(int i = 0; i < r.v.size(); i++)
  os << int(r.v[r.v.size()-i-1]);       // вывод в обратном порядке
  return os;
}
Единственный нюанс — это вывод цифр числа (элементов вектора) в обратном порядке, поскольку число в векторе «лежит» от младшей цифры к старшей, а читаем мы числа от старшей цифры к младшей.
Реализацию остальных методов оставляем читателю. Используйте для реализации дружественных функций уже реализованные операции с присваиванием, например
C++
1
2
LongLong operator+(const LongLong &l, const LongLong &r)
{ LongLong tmp = l; tmp+=r; return tmp; }
 
Текущее время: 21:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru