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

Работа с двунаправленым списком. STL <list> - C++

Восстановить пароль Регистрация
 
same
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
04.12.2013, 21:00     Работа с двунаправленым списком. STL <list> #1
Помогите пожалуста найти ошибку..
3) Даны натуральное число n, действительные числа x1,x2,....,xn . Вычислить:
x1*xn+x2*xn-1+...+xn*x1

Моя прога..
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
#include "stdafx.h"
#include <list>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    list<double> lst;
    list<double>::iterator i;
    list<double>::iterator j;
    int n=0;
    double a;
    cout << "Enter size of list: ";
        cin >> n;
        cout << "Enter elements: "<<endl;
        for (int i=0; i<n; i++)
        {
            cin>>a;
            lst.push_back(a);
        }
        i=lst.begin();
        while (i!=lst.end())
        {
        cout << *i << ' ' ;
        i++;
        }
        
        i=lst.begin();
        j=lst.end();
        double sum=0;
        while (i!=lst.end() && j!=lst.begin())
{           sum+=*i * *j;
        i++;
        j--;
}
        cout<<sum;
        system ("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 21:00     Работа с двунаправленым списком. STL <list>
Посмотрите здесь:

C++ Как реализовать работу со списком строк и списком цифр в классе List?
Работа со списком STL C++
C++ Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком
Стандартная библиотека шаблонов STL и класс list по работе с двунаправленным списком C++
C++ STL>>list<_Ty>
Работа с STL. Поменять vector на list C++
C++ Работа с STL list
C++ STL List
C++ STL list
List STL C++
STL list C++
Работа с STL list + пропись List.h C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1424 / 761 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.12.2013, 21:47     Работа с двунаправленым списком. STL <list> #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <list>
#include <numeric>
 
int main()
{
   std::list<int> l {1, 2, 3, 4, 5, 6};
   std::cout << "Result: "
             << std::inner_product(l.begin(), l.end(), l.rbegin(), 0u)
             << std::endl;
 
   return 0;
}
Alex5
901 / 636 / 90
Регистрация: 12.04.2010
Сообщений: 1,622
04.12.2013, 21:58     Работа с двунаправленым списком. STL <list> #3
Цитата Сообщение от same Посмотреть сообщение
j=lst.end();
Если j == lst.end(), то *j не является элементом списка. Для прохода списка от конца к началу используется reverse_iterator
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    // проход списка от конца к началу 
    list<double>::reverse_iterator rj;
    cout << endl;
    cout << " From end to begin : " << endl;
    for( rj=lst.rbegin(); rj!= lst.rend(); rj++ )
    {
        cout << *rj << endl;
    }
 
    i=lst.begin();
    rj=lst.rbegin(); // reverse_iterator указывает на последний элемент списка 
    double sum=0;
    while (i!=lst.end() && rj!=lst.rend() )
    {           
        sum+=*i * *rj;
        i++;
        rj++; // сдвиг reverse_iterator на одну позицию к началу списка 
    }
same
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
05.12.2013, 17:30  [ТС]     Работа с двунаправленым списком. STL <list> #4
Спасибо!)
а можешь обьяснить почему нельзя использовать то что у меня?)
Alex5
901 / 636 / 90
Регистрация: 12.04.2010
Сообщений: 1,622
05.12.2013, 19:25     Работа с двунаправленым списком. STL <list> #5
same, end() не является последним элементом списка. Это уже за пределами списка - см. рис.
i=lst.begin();
j=lst.end();
double sum=0;
while (i!=lst.end() && j!=lst.begin())
{ sum+=*i * *j;
i++;
j--;
}
В этом коде при входе в цикл j равняется lst.end(). И если попытаться вычислить *j, это приведёт к ошибке.

Вот ещё вариант, как посчитать сумму
C++
1
2
3
4
5
6
7
8
9
10
11
12
    list<double>::iterator i;
    list<double>::iterator j;
    i=lst.begin();
    j=lst.end();
    double sum=0;
    while (i!=lst.end() )
    {
        --j;
        sum+=*i * *j;
        i++;
    }
    cout << "\n  sum == " << sum;
Миниатюры
Работа с двунаправленым списком. STL <list>  
same
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 7
08.12.2013, 15:51  [ТС]     Работа с двунаправленым списком. STL <list> #6
Понял, спасибо!)
Yandex
Объявления
08.12.2013, 15:51     Работа с двунаправленым списком. STL <list>
Ответ Создать тему
Опции темы

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