Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359

Присвоить контейнеру Vector другой контейнер

27.09.2016, 08:09. Показов 1440. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть функция, которая возвращает QVector (аналог std Vector), при этом она в качестве аргумента сама использует тот вектор, который выдает.

C++ (Qt)
1
2
3
4
5
 QVector<float>   shuttle_method(const  QVector<float> &below_main_diagonal ,
                                             QVector<float> &main_diagonal  ,
                                      const  QVector<float> &beyond_main_diagonal ,
                                      const  QVector<float> &free_term,
                                      const  int N)
Делаю так:

C++ (Qt)
1
2
3
4
5
6
7
 QVector<float>Tn;
Tn.resize(20);
    for(int stepTime=0;stepTime<50;stepTime++){
        Tn=  shuttle_method(alpha,beta,gamma,Tn,cells_x);
        Tn[0]=0;Tn[19]=1;
       cout<<Tn<<endl;
    }
при этом выводит очень странно:
Кликните здесь для просмотра всего текста
Tn <20 items> QVector<float>
0 float
0.000425464 float
0.000664658 float
0.000937085 float
0.00125637 float
0.00163846 float
0.00210249 float
0.00267163 float
0.00337436 float
0.00424581 float
0.00532955 float
0.00667976 float
0.00836396 float
0.0104664 float
0.0130921 float
0.0163724 float
0.0204714 float
0.0255939 float
0.0319961 float

Tn <20 items> QVector<float>
0 float
-0.000425464 float
0.000643385 float
-0.000926707 float
0.00120951 float
-0.00161561 float
0.00202056 float
-0.00263167 float
0.00324078 float
-0.00418065 float
0.00511726 float
-0.00657621 float
0.00802998 float
-0.0103034 float
0.0125688 float
-0.0161171 float
0.0196527 float
-0.0251945 float
0.0307164 float
1 float

Tn <20 items> QVector<float>
0 float
0.000425464 float
0.000664658 float
0.000937085 float
0.00125637 float
0.00163846 float
0.00210249 float
0.00267163 float
0.00337436 float
0.00424581 float
0.00532955 float
0.00667976 float
0.00836396 float
0.0104664 float
0.0130921 float
0.0163724 float
0.0204714 float
0.0255939 float
0.0319961 float

Tn <20 items> QVector<float>
0 float
-0.000425464 float
0.000643385 float
-0.000926707 float
0.00120951 float
-0.00161561 float
0.00202056 float
-0.00263167 float
0.00324078 float
-0.00418065 float
0.00511726 float
-0.00657621 float
0.00802998 float
-0.0103034 float
0.0125688 float
-0.0161171 float
0.0196527 float
-0.0251945 float
0.0307164 float
1 float


То есть, как-то циклично одно и то же через раз. Очевидно, что вычислительная программа никогда не может давать таких результатов. Что я делаю тут не так?

Добавлено через 9 минут
То есть, как-будто делается только одна итерация и всё
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2016, 08:09
Ответы с готовыми решениями:

Заменить контейнер vector, использовавшийся для хранения текстовых строк (листинг 2.3), на контейнер list
Здравствуйте форумчане, может кто объяснить как делать это задание и что собственно мы тут вообще делаем. сам листинг 2.3 ниже ...

контейнер vector
Как я понимаю, vector представляет собой что-то вроде динамического массива. Но массивы бывают одномерные,двумерные и так далее. Есть ли...

Контейнер std::vector
Помогите определить почему не работает задача. Оибку выбивает на строку k.push_back(0); #include &lt;iostream&gt; #include...

8
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.09.2016, 08:26
Первый вывод из функции идёт, а второй после вызова?
А что внутри?
0
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
27.09.2016, 08:27  [ТС]
Вот коротенький код.
Первый вызов до цикла, а следующие в цикле

C++ (Qt)
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
#include <QCoreApplication>
#include <QVector>
#include <QDebug>
#include <iostream>
using std::cin;
 
void enterIn(QVector<float> &Array, int Amount_of_elements){
    int transit;
    for(int i=0;i<Amount_of_elements;i++){
        cin>>transit;
        Array.push_back(transit);
    }
}
 
QVector<float>   shuttle_method(const  QVector<float> &below_main_diagonal ,
                                             QVector<float> &main_diagonal  ,
                                      const  QVector<float> &beyond_main_diagonal ,
                                      const  QVector<float> &free_term,
                                      const  int N){
 
    QVector <float> c;
    QVector <float> d;
 
    for(int i=0;i<N;i++){
        main_diagonal[i]*=(-1);
    }
 
    QVector<float> x; //result
 
    c.push_back(beyond_main_diagonal[0]/main_diagonal[0]);
    d.push_back(-free_term[0]/main_diagonal[0]);
 
    for(int i=1;i<=N-2;i++){
        c.push_back(beyond_main_diagonal[i]/(main_diagonal[i]-below_main_diagonal[i]*c[i-1]));
        d.push_back(  (below_main_diagonal[i]*d[i-1]  -  free_term[i])  /  (main_diagonal[i]-  below_main_diagonal[i]*c[i-1])  );
    }
 
    x.resize(N);
  //  qDebug()<<x.size()<<endl;
 
    int n=N-1;
    x[n]=(below_main_diagonal[n]*d[n-1]-free_term[n])/(main_diagonal[n]-below_main_diagonal[n]*c[n-1]);
 
    for(int i=n-1;i>=0;i--){
        x[i]=c[i]*x[i+1]+d[i];
        // qDebug()<<x[i]<<endl;
    }
 
    return x;
}
 
int main()
{ 
 
    QVector <float> alpha;  // below
    QVector <float> beta;   // main diagonal * (-1)
    QVector <float> gamma;  // beyond
    QVector <float> b;      // free term
 
    QVector<float> T;
 
    int cells_x=40;         //amount of equations
    alpha.resize(cells_x);
    beta.resize(cells_x);
    gamma.resize(cells_x);
    b.resize(cells_x);
    T.resize(cells_x);
 
    float dt=0.2,h=0.1;
 
    alpha[0]=0;
    for(int i=1;i<cells_x;i++){
        alpha[i]= -dt/(h*h);
    }
 
    for(int i=0;i<cells_x;i++){
        beta[i] = (2*dt)/(h*h)+1;
    }
    for(int i=0;i<cells_x-1;i++){
        gamma[i]= -dt/(h*h);
    }
    gamma[cells_x-1]=0;
 
    qDebug()<<"alpha= "<<endl<<alpha.size()<<alpha<<endl<<"beta = "<<endl<<beta.size()<<beta<<endl<<"gamma= "<<gamma.size()<<gamma<<endl;
 
 
       for(int i=0;i<cells_x-1;i++){
           T[i]=0;
       }
       T[cells_x-1]=1;
       qDebug()<<endl<<endl<<T<<endl;
 
   // qDebug()<< shuttle_method(alpha,beta,gamma,b,N);
 
       QVector<float>Tn;
       Tn.resize(cells_x);
       Tn=  shuttle_method(alpha,beta,gamma,T,cells_x);
       Tn[0]=0;Tn[cells_x-1]=1;
    for(int stepTime=0;stepTime<50;stepTime++){
        Tn=  shuttle_method(alpha,beta,gamma,Tn,cells_x);
 
    Tn[0]=0;Tn[cells_x-1]=1;
    qDebug()<<Tn<<endl;
}
 
return 0;
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.09.2016, 08:55
Как получена эта последовательность вывода? Почему 0, 1 не во всех группах, они же принудительно присваиваются?
0
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
27.09.2016, 12:35  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Как получена эта последовательность вывода?
Как я понимаю, мы решаем СЛАУ методом обратной прогонки, решение - массив, он и выводится. Потом происходит переприсваивание и я вектору свободных членов присваиваю получившийся результат (массиву Tn), таким образом решение итерационное: я получил решение на следующем шаге, поменял столбик свободных членов на вектор, который получил, посчитал снова, подставил и т.д.

Цитата Сообщение от nmcf Посмотреть сообщение
Почему 0, 1 не во всех группах, они же принудительно присваиваются?
0 и 1 - это температура стержня слева и справа соответственно. Она постоянная и входит в решение, так как нам надо получить распределение температуры на всем стержне с течением времени.
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
28.09.2016, 12:24
Я решал подобную задачу, но это был простой метод прогонки. Без прикрутки ДУЧП
0
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
28.09.2016, 16:26  [ТС]
Может кто-нибудь знает...?

Добавлено через 9 минут
nmcf, вы же гуру программирования. Скажите хотя бы, как вы считаете, дело в неправильном присваивании:
C++ (Qt)
1
    Tn=  shuttle_method(alpha,beta,gamma,Tn,cells_x);
и что-то с рекурсией или же просто вычислительный алгоритм реализован ошибочно?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.09.2016, 17:30

Не по теме:

Я гуру? :)


В присваивании ничего такого не вижу. И рекурсию не вижу.
0
11 / 11 / 1
Регистрация: 24.11.2015
Сообщений: 359
28.09.2016, 17:35  [ТС]

Не по теме:

Цитата Сообщение от nmcf Посмотреть сообщение
Не по теме:
Я гуру?
Абсолютно точно.



Цитата Сообщение от nmcf Посмотреть сообщение
В присваивании ничего такого не вижу. И рекурсию не вижу.
Значит, все дело в том, что я неправильно понимаю алгоритм решения...

Но вот только я все равно не могу осознать, почему я получаю такие циклически одинаковые массивы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.09.2016, 17:35
Помогаю со студенческими работами здесь

Инициализация графа (контейнер vector)
Нашёл как ра то, что мне нужно, алгоритм Форда-Беллмана. С помощью этого алгоритма можно найти кратчайшие пути между заданной вершиной и...

Контейнер, похожий на std::vector из C++
скажите какой в шарпе контейнер наиболее похож на плюсовый вектор? вот вроде List (предчувствую сейчас скажут) он также дает динамическое...

Как положить строку из файла в контейнер vector
Нужно считать строки из файла, и все строки, начинающиеся на &quot;a, c, e...&quot; в контейнер vector положить, а другие строки на &quot;b, d,...

Заполнить контейнер map и vector данными из файла
Текстовый файл содержит в себе информацию о пяти лифтах в виде: 12 900 first 10 600 second 15 700 third 20 1000 fourth 16 800...

Возможно ли вложение контейнера array в контейнер vector?
мне надо в динамическом массиве хранить 3-х мерные координаты треугольников. пытаюсь сделать вот так: ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru