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

Как удалить первый элемент из std::list? - C++

Восстановить пароль Регистрация
 
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
13.05.2011, 18:40     Как удалить первый элемент из std::list? #1
Скажите как удалить первый элемент из лист ругается вот как
181 C:\Documents and Settings\Loner\Рабочий стол\5.37\Bin.cpp 'class std::list<unsigned char, std::allocator<unsigned char> >' has no member named 'next'
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
13.05.2011, 18:48     Как удалить первый элемент из std::list? #2
Ты б хоть текст привел бы.
А вообще L.pop_front()
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
13.05.2011, 18:52  [ТС]     Как удалить первый элемент из std::list? #3
это опять вы=))))) да, да, да вы правы... я так и сделал=)) работает...... подскажите с умнажение двоичных чисел
работает только с двумя разрядами.. я третий день из-за этой задачи уснуть не могу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Bin Bin::operator*(Bin& b1){
long i;
int s;
Bin b2, b3;
b3.n.push_back('0');
b3.it=b3.n.begin();
*b3.it='0';
 
b2.n=n;
s=b1.n.size();
for(b1.it=b1.n.begin(),  i=0; i<s; i++, b1.it++){  //it=n.begin(),
if(*b1.it=='1'){
b3=b3+b2;
b2.n.push_front('0');}
if(*b1.it=='0'){
b2.n.push_front('0');}
}
return b3;
}
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
13.05.2011, 18:58     Как удалить первый элемент из std::list? #4
В смысле? Надо написать класс двоичных чисел, в котором определить операцию умножения?
----------------------
Как представляется двоичное число? Как массив из char? Или как строка string?
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
13.05.2011, 19:06  [ТС]     Как удалить первый элемент из std::list? #5
Как удалить первый элемент из std::list? это условие
это то что я смог накалякать!!!
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <cstdlib>
#include <iostream>
#include "Bin.h"
using namespace std;
 
int main(int argc, char *argv[])
{
    string c;
    Bin b1, b2,b3;
    cout<<"Enter the first number:"<<endl;
    cin>>b1;
     if(b1.check()){
    cout<<"Enter the command(+,-,*,/,%,>,>,!=,==)"<<endl;
    cin>>c;
     if(c==">" || c=="<" || c=="==" || c=="!=" || c=="+" || c=="*"|| c=="/"|| c=="-"|| c=="%"){
    cout<<"Enter the second number:"<<endl;
    cin>>b2;
     if(b2.check()){
   //Операция сложение
      if(c=="+"){ 
       b1=b1+b2;
        cout<<"Result of additions:"<<endl<<b1; } 
        // Операция вычитание
         if(c=="-"){
            if(b1>b2){ 
              b1=b1-b2;
              cout<<"Result:"<<endl<<b1;}
            else{cout<<"The inadmissible answer!"<<endl;}}
        //Операция  умножение
            if(c=="*"){
            b1=b1*b2;
            cout<<"Result of multiple:"<<endl<<b1;} 
        //Операция деление
          if(c=="/"){
            b1=b1/b2;
            cout<<"Result of division:"<<endl<<b1;} 
           // Операция остаток
            if(c=="%"){
            b1=b1%b2;
            cout<<"Result:"<<endl<<b1;
          }   
    // Операция больше
    if(c==">"){
    if(b1>b2){
    cout<<"The first number more than the second!"<<endl;
    }
    else{
    cout<<"The first number no more than the second!"<<endl;
    if(b1==b2){cout<<"The numbers are equal!"<<endl;}
    else{cout<<"The first number less than the second!"<<endl;}
         }
         }
    //Операция меньше
    if(c=="<"){
    if(b1>b2){
    cout<<"The first number less than the second!"<<endl;
    }
    else{
    cout<<"The first number no less than the second!"<<endl;
    if(b1==b2){cout<<"The numbers are equal!"<<endl;}
    else{cout<<"The first number more than the secind!"<<endl;}
         }
         }
    // Операция равно
    if(c=="=="){
    if(b1==b2){
    cout<<"The Numbers are equal!"<<endl;
    }
    else{
    cout<<"The numbers are not equal!"<<endl;
    if(b1>b2) {cout<<"The first number more than the second!"<<endl;}
    else{cout<<"The first number less than the second!"<<endl;}
               }
               }
    // Операция не равно
    if(c=="!="){
    if(b1!=b2){
    cout<<"The numbers are not equal!"<<endl;
    if(b1>b2){cout<<"The first number more than the second!"<<endl;}
    else{cout<<"The first number less than the second!"<<endl;}
    }
     else{cout<<"The numbers are equal!"<<endl;}
     }
     }
     else {cout<<"The second number is incorrect!"<<endl;}
     }
     
     else {cout<<" The incorect operations is entered!"<<endl;}
     }
     else {cout<<"The first number is incorrect!"<<endl;}
     cin>>b3;
  cout<<b3.sign();
    system("PAUSE");
    return EXIT_SUCCESS;
}
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
#ifndef BIN
#define BIN
 
#include <list>
#include <iostream>
 
using namespace std;
class Bin{
      public:
             friend istream& operator>>(istream&, Bin&);
             friend ostream& operator<<(ostream&, const Bin&);
             Bin operator+(Bin&);
             Bin operator-(Bin&);
             Bin operator*(Bin&);
             Bin operator/(Bin&);
             Bin operator%(Bin&);
             int operator>(Bin);
             int operator<(Bin);
             int operator==(Bin);
             int operator!=(Bin);
             int check();
             Bin sign();
             private:
             list <unsigned char> n;
             list <unsigned char>::iterator it;
             long Transfer();
             friend void conclusion(Bin);
};
#endif
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include <cstdlib>
#include <iostream>
#include <math.h>
#include "Bin.h"
using namespace std;
 
Bin Bin:: operator+(Bin& b1){
int t=0;
int i, n1,n2,s;
char f[2];
if(b1.n.size()>n.size()){s=b1.n.size();}  
else{s=n.size();}
 b1.n.resize(s);
 n.resize(s);
for(b1.it=b1.n.begin(), it=n.begin(), i=0; i<s; i++){  
      *f=*b1.it; 
n1=atoi(f);  
  *f=*it; 
 n2=atoi(f);
 n1=n1+n2+t;  
t=0;  
if(n1>1){  
t=n1/2;            
n1=n1%2;
}
_itoa(n1, f, 2);
  *b1.it=*f;
 if(i<b1.n.size()){b1.it++;}  
 else{*b1.it='0';}  
 if(i<n.size()){it++;}
         else{*it='0';}  
}  
  if(t>0){
      _itoa(t, f, 2);
      b1.n.push_back(*f); 
    
}
    return b1;
}
  
Bin Bin:: operator*(Bin& b1){
int i;
  long n1, n2; 
  int s;
Bin b2,b3;
 
if(b1.n.size()>n.size()){s=b1.n.size();}  
else{s=n.size();}
 b1.n.resize(s);
 n.resize(s);
 char f[s];
b2.n=n; 
    n1=b2.Transfer(); 
 for(it=n.begin(), i=0; i<s; i++, it++){
                   *f=*it;
                   n2=atoi(f);
                   n1=n1*n2;
 }
 _itoa(n1,f,2);
  for(i=strlen(f)-1; i>=0; i--){ 
       b3.n.push_back(f[i]);
     }
 return b3;
};
long Bin::Transfer(){ 
    int n1, i;
    long n2;
    char f[2];
    n2=0; 
    
    for(it=n.begin(), i=0; i<n.size(); i++, it++){
     
           *f=*it;
           n1=atoi(f);
      
      n2=n1*long(pow(2, i))+n2; 
    }
    return n2;
}
 
Bin Bin::operator/(Bin& b1){ 
    long n1, n2; 
    Bin b2, b3; 
   int i;
    char a[n.size()]; 
    b2.n=n; 
    n1=b2.Transfer(); 
    n2=b1.Transfer();
    n1=n1/n2; 
     _itoa(n1, a, 2); 
     for(i=strlen(a)-1; i>=0; i--){ 
       b3.n.push_back(a[i]);
     }
     return b3;
}
Bin Bin::operator-(Bin& b1){
    long n1, n2; 
    Bin b2, b3; 
    int i;
    char a[n.size()]; 
    b2.n=n; 
    n1=b2.Transfer(); 
    n2=b1.Transfer();
    n1=n1-n2; 
     _itoa(n1, a, 2); 
     for(i=strlen(a)-1; i>=0; i--){ 
       b3.n.push_back(a[i]);
     }
     return b3;
}
Bin Bin::operator%(Bin& b1){ 
    long n1, n2; 
    Bin b2, b3; 
    int i;
    char a[n.size()]; 
    b2.n=n; 
    n1=b2.Transfer(); 
    n2=b1.Transfer();
    n1=n1%n2; 
     _itoa(n1, a, 2); 
     for(i=strlen(a)-1; i>=0; i--){ 
       b3.n.push_back(a[i]);
     }
     return b3;
}  
int Bin::check(){ 
    int i;
    for(i=0, it=n.begin(); i<n.size(); i++, it++){ 
      if(not(*it=='0' || *it=='1'|| *it=='-')){break;} 
    }
    if(i==n.size()){return 1;} 
    else{return 0;} 
}
 
istream& operator>>(istream& in, Bin& b1){
         string s1;
         int i;
         in>>s1;
   for(i=s1.size()-1; i>=0; i--){ 
           b1.n.push_back(s1[i]);}
         return in;
}
 
ostream& operator<<(ostream& out, const Bin& b1){
         conclusion(b1);
         cout<<endl;
         return out;};
void conclusion(Bin b1){
     int i;
     b1.it=b1.n.end();
     for(b1.it--, i=b1.n.size()-1; i>=0; b1.it--, i--)
     cout<<*b1.it;
}
int Bin::operator>(Bin b1) {
     if(n>b1.n) {return 1;}
     else {return 0;}
     }
int Bin::operator<(Bin b1) {
    if(n<b1.n) {return 1;}
    else {return 0;}
         }
int Bin::operator!=(Bin b1){
    if(n!=b1.n) {return 1;}
    else {return 0;}
         }
int Bin::operator==(Bin b1){
    if(n==b1.n) {return 1;}
    else {return 0;}
         } 
 Bin Bin::sign(){
      Bin h2;
      int i;
it=n.begin();
if(*it=='-') {h2.n.push_front('1'); it++;
for(i=1; i<n.size(); i++, it++){ if(*it=='0')h2.n.push_back('1');else h2.n.push_back('0'); }}
else  h2.n.push_front('0');{
     for(i=0; i<n.size(); i++, it++){ if(*it=='0')h2.n.push_back('0');else h2.n.push_back('1');  
     } 
     }
     reverse(h2.n.begin(), h2.n.end());
  
      return h2;
      
    
    
};
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
13.05.2011, 19:20     Как удалить первый элемент из std::list? #6
Ага. Задание опять мое. Только в сборнике - опечатка. Там цифра должна быть двоичной, а не десятичной.
Я тебе поправлю интерфейс пока.
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
#ifndef BIN
#define BIN
 
#include <list>
#include <iostream>
 
using namespace std;
class Bin{
      public:
             friend istream& operator>>(istream&, Bin&);
             friend ostream& operator<<(ostream&, const Bin&);
             Bin operator+(const Bin&);
             Bin operator-(const Bin&);
             Bin operator*(const Bin&);
             Bin operator/(const Bin&);
             Bin operator%(const Bin&);
             bool operator>(const Bin&);
             bool operator<(const Bin&);
             bool operator==(const Bin&);
             bool operator!=(const Bin&);                  // -- это можно не делать, поскольку можно обойтись предыдущими операциями 
             int check();                                        // -- это что делает?
             Bin sign();                                          // это что делает?
             private:
             list <unsigned char> n;                         
             list <unsigned char>::iterator it;             // -- это не нужно как отдельное поле
             long Transfer();                                   // -- это что делает? 
             friend void conclusion(const Bin&);         // -- это зачем?
};
#endif
Добавлено через 3 минуты
Я вроде где-то это уже тут постил, но давай еще раз:

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 будет расположено так:
C++
1
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;
}
Единственный нюанс — это вывод цифр числа (элементов вектора) в обратном порядке, поскольку число в векторе «лежит» от младшей цифры к старшей, а читаем мы числа от старшей цифры к младшей.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 19:23     Как удалить первый элемент из std::list?
Еще ссылки по теме:

Удалить первый совпадающий по значению элемент из std::vector C++
Как обратиться к следующему элементу в std::list? C++
Переместить элемент внутри списка std::list C++

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

Или воспользуйтесь поиском по форуму:
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
13.05.2011, 19:23  [ТС]     Как удалить первый элемент из std::list? #7
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
#ifndef BIN
#define BIN
 
#include <list>
#include <iostream>
 
using namespace std;
class Bin{
      public:
             friend istream& operator>>(istream&, Bin&);
             friend ostream& operator<<(ostream&, const Bin&);
             Bin operator+(const Bin&);
             Bin operator-(const Bin&);
             Bin operator*(const Bin&);
             Bin operator/(const Bin&);
             Bin operator%(const Bin&);
             bool operator>(const Bin&);
             bool operator<(const Bin&);
             bool operator==(const Bin&);
             bool operator!=(const Bin&);                  // -- это можно не делать, поскольку можно обойтись предыдущими операциями 
             int check();                                 // это проверка что бы при вводе были только двоичные 
                                                              // т.е 0 и1
             Bin sign();                                          // это что делает? это по условию знак!!
             private:
             list <unsigned char> n;                         
             list <unsigned char>::iterator it;             // -- это не нужно как отдельное поле
             long Transfer();                                   // -- это перевод в 10-ное число...
             friend void conclusion(const Bin&);         // --функция для вывода!!!
};
#endif
написать программу нужно используя лист, она работает, напряг только с умножением!!
Yandex
Объявления
13.05.2011, 19:23     Как удалить первый элемент из std::list?
Ответ Создать тему
Опции темы

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