Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.72
vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
#1

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

03.03.2010, 14:12. Просмотров 7958. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2010, 14:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как через push_back заполнить вектор векторов? (C++):

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

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

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

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

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

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

7
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
03.03.2010, 16:21 #2
C++
1
2
3
4
5
vector<float> tm;
vector<vector <float> > m1;
 
tm.push_back(1.3123);
m1.push_back(tm);
2
Chardash
1 / 1 / 2
Регистрация: 20.12.2013
Сообщений: 27
12.12.2015, 21:26 #3
Здравствуйте, посетители ресурса! Может быть у кого-то найдется время помочь разобраться в коде?
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
Dimension
569 / 438 / 135
Регистрация: 08.04.2014
Сообщений: 1,709
Завершенные тесты: 1
12.12.2015, 21:40 #4
что конкретно вам не понятно ?
0
Chardash
1 / 1 / 2
Регистрация: 20.12.2013
Сообщений: 27
12.12.2015, 22:06 #5
Цитата Сообщение от 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
Комп_Оратор)
Эксперт по математике/физике
6503 / 3142 / 307
Регистрация: 04.12.2011
Сообщений: 8,673
Записей в блоге: 5
12.12.2015, 22:44 #6
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
Chardash
1 / 1 / 2
Регистрация: 20.12.2013
Сообщений: 27
12.12.2015, 23:28 #7
Цитата Сообщение от IGPIGP Посмотреть сообщение
Chardash, нарушаю правило, но поскольку темы придерживаемся то:
IGPIGP, прошу прощения у админов, если нарушили, не знал. Ваш пример выше понятен, спасибо. Можно тот же пример с циклом, но в стиле метода из поста 3, Matrix Matrix::inverse()? Еще не совсем ясно, как работать с вектором, если массив многомерный.

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

и затолкать в векторы векторов векторов ....векторов (сколько на сколько не важно).
Пофантазируйте.
1
13.12.2015, 00:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2015, 00:13
Привет! Вот еще темы с ответами:

Метод push_back заносит некорректные данные в вектор - C++
Есть структура вида: struct PadStyleDef { std::string name; std::string padShapeType; float shapeWidth; float shapeHeight; ...

Как обьявить вектор векторов? - C++
Как обьявить вектор векторов? Так ругается vector&lt;vector&lt;int&gt;&gt; matrix = { {1, 2}, {3, 4} }; Так тоже const int ROWS =...

Создать шаблонную матрицу как вектор векторов - C++
Здравствуйте! Пишу программу по матрицам. При чем матрица создается здесь как вектор векторов. Не могу никак справиться с ошибкой, не...

как создать вектор из векторов и как потом к нему обращаться? - C++
Банальный вопрос - как создать вектор из векторов и как потом к нему обращаться? вот vector&lt;int&gt; a; - это, понятное дело, вектор а, а вот...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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