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

После умножения очередей заполняется первый элемент очереди - C++

Восстановить пароль Регистрация
 
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
16.07.2014, 12:48     После умножения очередей заполняется первый элемент очереди #1
пытаюсь умножить две очереди (первый элемент на все элементы второй очереди сложить и запихнуть в новую очередь) Но после такого умножения у меня заполняется первый элемент очереди а все остальные контейнеры принимают нулевое значение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Polynomial Polynomial::poly_mult (Polynomial *a , Polynomial *b){
  queue <int> t = a->get_coeff();
  queue <int> p = b->get_coeff();
  queue <int> result;
  int tmp,tp;
 while(!t.empty()){
      tmp=t.front(); t.pop();
    int temp=0;
      while(!p.empty()){
          tp=p.front(); p.pop();
          temp=temp+tp*tmp;
          tp=0;
      }
      result.push(temp);
    
  }
  Polynomial *polynom = new Polynomial(result.size()-1,0,result);
  return *polynom;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2014, 12:48     После умножения очередей заполняется первый элемент очереди
Посмотрите здесь:

Удалить первый и последний элемент очереди C++
Строки. Как найти в слове первый элемент? Второй элемент, последний элемент? C++
C++ Массивы. Вставить новую строку после строки, в которой находится первый встречный минимальный элемент
Вставить новую строку после строки, в которой находится первый встречный минимальный элемент C++
Вставте в массив после строки, первый элемент которой отрицателен, нулевую строку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
16.07.2014, 12:54     После умножения очередей заполняется первый элемент очереди #2
C++
1
2
3
4
5
while(!p.empty()){
          tp=p.front(); p.pop();
          temp=temp+tp*tmp;
          tp=0;
      }
эта очередь после 1го прохода станет пустой, я так полагаю Вы задумывали не так)
и это
C++
1
2
Polynomial *polynom = new Polynomial(result.size()-1,0,result);
  return *polynom;
освобождаете потом память то? или нет?
лучше просто объект создавайте
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
16.07.2014, 12:58  [ТС]     После умножения очередей заполняется первый элемент очереди #3
хотел создать метод который в конце создает новые объект вызывает при этом конструктор с этими параметрами

Добавлено через 1 минуту
не совсем пойму почему она станет пустой, как это можно обойти ?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
16.07.2014, 13:00     После умножения очередей заполняется первый элемент очереди #4
ну....начем с того что очередь не подразумевает доступа к 2ому и т.д элементам, следовательно - копировать и ее опустошать и так на каждой итерации
Цитата Сообщение от FloraWinx Посмотреть сообщение
хотел создать метод который в конце создает новые объект вызывает при этом конструктор с этими параметрами
а это разве будет не тоже самое?
C++
1
2
Polynomial polynom(result.size()-1,0,result);
  return polynom;
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
16.07.2014, 13:04  [ТС]     После умножения очередей заполняется первый элемент очереди #5
получается после того как как я прошелся циклом, очередь стала пустой. спасибо понятно, осталось только переделать запихнуть все в массив.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
16.07.2014, 13:06     После умножения очередей заполняется первый элемент очереди #6
Цитата Сообщение от FloraWinx Посмотреть сообщение
Polynomial Polynomial:oly_mult (Polynomial *a , Polynomial *b)
и смысл далеть эту ф-цию членом класса? если она не использует объект у которого вызывается ф-ция...2 варианта сделать так
C++
1
2
3
4
5
6
7
Polynomial Polynomial::poly_mult (Polynomial *b)
{
queue <int> t = get_coeff();
  queue <int> p = b->get_coeff();
  queue <int> result;
///
}
или так
C++
1
2
3
4
5
6
7
8
9
10
11
12
classPolinomial
{
//
friend Polynomial Polynomial::poly_mult (Polynomial *a , Polynomial *b);
//
};
 
//
Polynomial poly_mult (Polynomial *a , Polynomial *b)
{
//реализация
}
Добавлено через 31 секунду
FloraWinx, массив....а что не вектор?
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
16.07.2014, 13:14  [ТС]     После умножения очередей заполняется первый элемент очереди #7
Спасибо Вам огромное до меня дошло. Да , можно и вектором)
если она не использует объект у которого вызывается ф-ция
не сильно понял, нету смысла создавать метод класса если обьект не вызывает функцию?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
16.07.2014, 14:03     После умножения очередей заполняется первый элемент очереди #8
ну смотрет вот Вы создали объект
Polynomial obj1.
вызываете ф-цию
obj1.poly_mult(//тут параметры)
в ф-ции у Вас поля объекта obj1 не используются, поэтому я и предалагаю ф ц-ию передавать 1 параметр, а в качестве 2го класса будет объект у которого вызывается ф-ция, т.е obj1, или сделать ее френд чтобы вызывать без объекта
FloraWinx
 Аватар для FloraWinx
4 / 4 / 1
Регистрация: 05.10.2013
Сообщений: 122
16.07.2014, 23:27  [ТС]     После умножения очередей заполняется первый элемент очереди #9
переписал теперь в ячейках мусор
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
Polynomial Polynomial::poly_mult (Polynomial *a , Polynomial *b){
    
    queue <int> aa = a->get_coeff();
    queue <int> bb = b->get_coeff();
    queue <int> res ;
    
    int *array1 = new int [aa.size()];
    int *array2= new int [bb.size()];
 
    int v = aa.size(); 
    int w=  bb.size();
 
    for(int i=0;i<v;i++){
        array1[i]=aa.front(); aa.pop();
    }
 
    for(int i=0;i<w;i++){
        array2[i]=bb.front();bb.pop();
    }
 
    int tmp,temp;
 
    for(int i=0;i<v;i++){
        tmp=array1[i];
        int rese=0;
        for(int j=0;j<w;j++){
            temp=array2[j];
         rese=rese+temp*tmp;
        }
        res.push(rese);
    }
 
 
Polynomial *polynom = new Polynomial(res.size()-1,0,res);
  return *polynom;
}
Добавлено через 2 минуты
Хотя все работает, разобрался
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2014, 14:12     После умножения очередей заполняется первый элемент очереди
Еще ссылки по теме:

Релизация очереди (первый пришел первый ушел) в классе C++
C++ Разветвляющийся алгоритм. Определить размеры очередей после проезда маршрутного такси заданной вместимости
Добавить элемент в середину очереди, если кол-во элементов четное, и после середины, если количество нечетное C++

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

Или воспользуйтесь поиском по форуму:
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
17.07.2014, 14:12     После умножения очередей заполняется первый элемент очереди #10
Цитата Сообщение от FloraWinx Посмотреть сообщение
Polynomial *polynom = new Polynomial(res.size()-1,0,res);
return *polynom;
уберите уже это!!!

C++
1
2
Polynomial polynom(res.size()-1,0,res); 
return polynom;
Добавлено через 1 минуту
C++
1
2
delete [] array1;
delete [] array2;
почему нет этого ?)
Yandex
Объявления
17.07.2014, 14:12     После умножения очередей заполняется первый элемент очереди
Ответ Создать тему
Опции темы

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