С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/131: Рейтинг темы: голосов - 131, средняя оценка - 4.92
 Аватар для vet
183 / 184 / 55
Регистрация: 08.04.2009
Сообщений: 1,309

Как через push_back заполнить вектор векторов?

03.03.2010, 14:12. Показов 25569. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как через push_back заполнить вектор векторов?
просто вектор например так:
C++
1
2
3
4
  for(int i=0;i<100;i++)
         m.push_back(rand()/100);
for(int i=0;i<mxyz1.size();i++)
         cout <<  mxyz1[i] << " ";
а "двумерный" как правильно? :
C++
1
2
3
4
5
6
  vector<vector <float> > m1;
for(int i=0;i<100;i++)
         m1[i].push_back(rand()/100);
for(int i=0;i<m1.size();i++){
for(int j=0;j<m1.size();j++){
cout << m1[i][j] << " "; } }
Пишет ошибка доступа (ошибка сегментации)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2010, 14:12
Ответы с готовыми решениями:

Как положить в вектор структур значение через push_back
есть вот такой вектор vector&lt;struct&lt;Point&gt;&gt; в структуре point , есть координата икс. struct Point { double Point_x; ...

Есть вектор пар, как положить туда значение пары через push_back
Есть вот такой вектор vector&lt;vector&lt;pair&lt;int, int&gt;&gt;&gt; number_pair; размер number_pair.size() у меня определен изначально, а вот...

как заполнить вектор векторов прямо в программе (самый быстрый метод)
почему не работает? #include&lt;cstdio&gt; #include &lt;vector&gt; using namespace std; vector&lt;int&gt; a; int main(){ a={4,6}; ...

7
Псевдо программист
 Аватар для R0mm
192 / 113 / 37
Регистрация: 19.09.2009
Сообщений: 303
03.03.2010, 16:21
C++
1
2
3
4
5
vector<float> tm;
vector<vector <float> > m1;
 
tm.push_back(1.3123);
m1.push_back(tm);
2
41 / 2 / 2
Регистрация: 20.12.2013
Сообщений: 35
12.12.2015, 21:26
Здравствуйте, посетители ресурса! Может быть у кого-то найдется время помочь разобраться в коде?
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
typedef vector<vector<double>>Elements;//вектор векторов
class Matrix
{
    Elements M;
    int R, C;//строки столбцы
public:
    //по умолчанию незадаваемые эл-ты равны нулю
    Matrix(int r, int c);//пр¤моуг матрица
    Matrix(int n);//квадр м-ца
    Matrix(int n, double d);
    ~Matrix() {};
    int GetR();
    int GetC();
    void rand(int mod);//зап случ знач по модулю mod
 
    Matrix inverse();//обрат
 
    
    vector<double> & operator[](int r);//доступ к элементу
 
    friend ostream & operator<< (ostream &os, Matrix &A); //вывод м-цы
 
};
 
 
Matrix Matrix::inverse()
{
    Matrix Ones(R, 1.0);
    Matrix A = *this;
    for (int i = 0; i < R; i++) //по всем строкам
    {
        int maxi = i;
        for (int s = i + 1; s < R; s++)
            maxi = abs(A[maxi][i]) < abs(A[s][i]) ? s : maxi; //Если maxi = abs(A[maxi][i]) < abs(A[s][i]) истинно, результатом операции будет s, в противном случае maxi
        swap(A[i], A[maxi]); 
        swap(Ones[i], Ones[maxi]);
        if (abs(A[i][i]) < eps)
            throw string("Matrix is not invertable");
 
        double buf = A[i][i];
        for (int ii = 0; ii < R; ii++)//то по всей строке
        {
            A[i][ii] /= buf;//делаем 1
            Ones[i][ii] /= buf;
        }
        for (int j = 0; j < R; j++)
        {
            if (i == j) continue;
            double buf = A[j][i];
            for (int jk = 0; jk < R; jk++)//то по всей строке
            {
                A[j][jk] -= A[i][jk] * buf;//вычитаем строку
                Ones[j][jk] -= Ones[i][jk] * buf;
            }
        }
    }
    return Ones;
}
Выше привел функцию, могу вывесить весь код. Комментарии частично мои, возможно неверные, в общем, не могу разобраться с вектором-векторов. Данная функция считает обратную матрицу. Не понятен сам алгоритм, где вычисляются миноры, определитель, транспонированная матрица? Буду очень благодарен за помощь.

Добавлено через 40 минут
Вопрос по алгоритму частично снят. Разобрался, что считают с помощью преобразований в единичную. С ветором-векторов актуально.
0
Dimension
595 / 463 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
12.12.2015, 21:40
что конкретно вам не понятно ?
0
41 / 2 / 2
Регистрация: 20.12.2013
Сообщений: 35
12.12.2015, 22:06
Цитата Сообщение от Dimension Посмотреть сообщение
что конкретно вам не понятно ?
не могу разобраться в векторе векторов. Вот например, есть сишная функция:
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
int cFoo(
    int m,          // Число строк матрицы
    int n,          // Число столбцов матрицы
    double *a,      // Адрес массива элементов матрицы
    double eps      // Точность вычислений
    ) {
    int i, j, k, l;
    double r;
 
    i = 0; j = 0;
    while (i < m && j < n) {
        r = 0.0;
        for (k = i; k < m; ++k) {
            if (fabs(a[k*n + j]) > r) {
                l = k;     
                r = fabs(a[k*n + j]); 
            }
        }
        
        // etc
    }
 
    return i; // Возвращаем число ненулевых строк
}
Как тоже самое сделать в векторе?

Добавлено через 13 минут
или хотя бы что почитать, чтобы в этом разобраться.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
12.12.2015, 22:44
Chardash, нарушаю правило, но поскольку темы придерживаемся то:
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
#include <iostream>
#include <vector>
using namespace std;
 
template<class T>
void printf_vec(vector<vector<T>> &vec)//название си-шное для облегчения восприятия)
{
vector<vector<T>>::iterator itRow;
vector<T>::iterator itColumn;
for(itRow=vec.begin(); itRow != vec.end(); itRow++)
{
for(itColumn=(*itRow).begin(); itColumn != (*itRow).end(); itColumn++)
{
cout<<(*itColumn)<<" ";
}
cout<<endl;
}
}
 
int main()
{
int one[]={1,2,3,4,5};
int two[]={2,3,4,5,6};
int thre[]={3,4,5,6,7};
int sizeV=sizeof(one)/sizeof(one[0]);
vector<vector<int>> vec;
vector<int> oneV(&one[0], &one[sizeV]);
vector<int> twoV(&two[0], &two[sizeV]);
vector<int> threV(&thre[0], &thre[sizeV]);
vec.push_back (oneV);
vec.push_back (twoV);
vec.push_back (threV);
printf_vec<int>(vec);
    system("pause");
    return 0;
}
1
41 / 2 / 2
Регистрация: 20.12.2013
Сообщений: 35
12.12.2015, 23:28
Цитата Сообщение от IGPIGP Посмотреть сообщение
Chardash, нарушаю правило, но поскольку темы придерживаемся то:
IGPIGP, прошу прощения у админов, если нарушили, не знал. Ваш пример выше понятен, спасибо. Можно тот же пример с циклом, но в стиле метода из поста 3, Matrix Matrix::inverse()? Еще не совсем ясно, как работать с вектором, если массив многомерный.

Добавлено через 13 минут
выше тот же вопрос). Если не сложно, тогда метод.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.12.2015, 00:13
Цитата Сообщение от Chardash Посмотреть сообщение
Можно тот же пример с циклом, но в стиле метода из поста 3
Можно но нежелательно. Контейнер тем и хорош, что инкапсулирует (скрывает) ненужные детали. Итераторы, это стандартные переменные косвенного обращения к элементам и лучше всего итерировать через них. Работать с вектором как с массивом потому что лень читать? Опять же не стоит.
Вектор векторов позволяет в отличие от многомерного массива создавать зубчатые многомерные структуры. То есть со строками разной длины и тут обобщённый подход особенно хорош. Не нужно передавать в функцию не размерность колонны ни размерность каждой строки. Поэкспериментируйте с примером задав разные размеры строк.
Цитата Сообщение от Chardash Посмотреть сообщение
Еще не совсем ясно, как работать с вектором, если массив многомерный.
Я показал 2-мерный. Показать больше? Пофантазируйте.
Забудьте про массив когда работаете с вектором. Всё что Вам нужно - правильно инициализировать вектор.
В моём пример содержимое исходных массивов копируется в векторы и потом вектор векторов инициализируется ими. Дальше эти массивы вектору не нужны.
Способ инициализации выберите сами. Если есть многомерный массив, значит по нему легко проитерировать
Цитата Сообщение от Chardash Посмотреть сообщение
в стиле метода из поста 3

и затолкать в векторы векторов векторов ....векторов (сколько на сколько не важно).
Пофантазируйте.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2015, 00:13
Помогаю со студенческими работами здесь

Объект структуры добавляется в вектор через push_back только со второго раза
Создал объект структуры и заполняю его из формы. Потом добавляю в вектор через push_back, в итоге при нажатии &quot;добавить&quot; первый...

Проверить можно ли выразить линейно один из векторов массива через заданный вектор
Дан массив векторов, и вектор b можно ли выразить вектор(один из массива) линейно через b Вообщем создал наброски, генерация массива,...

Немного поясните(вектор, push_back)
Вот вам код, господа #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { vector&lt;int&gt; m; for...

Заполнить вектор числами через функцию
Как заполнить вектор числами которые ввожу? #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; #include &lt;vector&gt; ...

Вектор объектов и работа c push_back. Избавьте от копий)
Всем мира! Ребята, короче хочу реализовать класс, описывающий работу зоомагазина. Делаю для самопрактики, так сказать, разбираюсь в бою...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru