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

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

Войти
Регистрация
Восстановить пароль
 
mat_for_c
164 / 159 / 34
Регистрация: 26.04.2013
Сообщений: 724
Завершенные тесты: 3
#1

vector<vector<double>> => 2 * vector<vector<double>> - C++

28.04.2013, 22:56. Просмотров 1019. Ответов 10
Метки нет (Все метки)

Здравствуйте. У меня следующий вопрос. Имеется двумерный массив, созданный через класс vector<vector<double>> и пусть последний столбец состоит из 0 и 1. Мне необходимо разделить исходную матрицу на 2 (матрицы тоже класса vector<vector<double>>): 1-я - это где все 1 , 2-я - все 0 в последних столбцах соответственно. Не подскажите как это можно сделать?
Через обычные двойные указатели - это понятно, но т.к. vector побыстрее работает в плане сортировок и т.д., то хочу перейти на него.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 22:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос vector<vector<double>> => 2 * vector<vector<double>> (C++):

vector<vector<double>> + std::sort() - C++
Позвольте узнать... Возможно ли через vector&lt;vector&lt;double&gt;&gt; и функцию std::sort() отсортировать строки массива в лексикографическом...

Vector<vector<double>> c++ - C++
компилятор ругается на операторы &quot;-&quot; , &quot;/&quot; ,&quot;*&quot; vector&lt;vector&lt;double&gt;&gt; y; vector&lt;double&gt; y_iter(N); y_iter = y_iter +...

error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Vector<int>::Vector<int>(void)" (?0?$Vector@H@@QAE@XZ) в функции _main - C++
//Vector.h #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;climits&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt;...

Как можно увеличить размер вектора, который является элементом вектора vector<vector<int>>arr(n, vector <int>) - C++
Написал программу, которая создает вектор 'а' векторов 'b', вектора 'b' содержат 2 числа. Стало интересно, как нужно изменить программу...

std::copy из vector<double> в *double, непонятный warning - C++
double myD={10,20,30,40,50,60,70}; std::vector&lt;double&gt; myvector (7); std::copy ( myD, myD+7, myvector.begin() ); std::copy (...

Vector to double - C++
Здравствуйте. У меня есть vector в котором хранятся значения типа char. Мне их нужно преобразовать в double На пример: V1 = ‘2’; V1...

10
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
30.04.2013, 13:05 #2
Не понял логику разделения, соответственно не могу предложить код.
0
-=ЮрА=-
Заблокирован
Автор FAQ
30.04.2013, 15:15 #3
mat_for_c, возможно подойдёт std::slice
http://www.cplusplus.com/reference/valarray/slice/

а так не помешало бы немного конкретики в плане какой из себя массив и второе как разделять, лучше рисунком на массиве 3х3
0
mat_for_c
164 / 159 / 34
Регистрация: 26.04.2013
Сообщений: 724
Завершенные тесты: 3
30.04.2013, 21:31  [ТС] #4
1 2 3 4 5 1
2 3 5 1 8 0
7 5 6 1 8 1
3 6 8 1 2 0
4 3 6 7 2 0
4 3 6 8 1 1
4 3 6 8 1 0
4 3 6 9 2 1

Получим:

1 2 3 4 5 1
7 5 6 1 8 1
4 3 6 8 1 1
4 3 6 8 1 1

2 3 5 1 8 0
3 6 8 1 2 0
4 3 6 7 2 0
4 3 6 8 1 0

Т.е. по сути вопрос заключается в копирование строки типа vector<double>, а как это делать через vector<> я не знаю.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
30.04.2013, 21:58 #5
mat_for_c,
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
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <vector>
#include <iomanip>
 
typedef std::vector<std::vector<int>> matrix;
 
void split( const matrix& src, matrix& zero, matrix& one )
{
    for( auto& v: src )
    {
        if( v[v.size()-1] == 0 ) zero.push_back(v);
        else one.push_back(v);
    }
}
 
void print( const matrix& m )
{
    for( auto& v: m )    
    {
        for( auto& e: v )
        {
            std::cout << std::setw(5) << e;
        }
        std::cout << std::endl;
    }
}
 
int main() {
 
    matrix m = { 
    {1, 2, 3, 4, 5, 1},
    {2, 3, 5, 1, 8, 0},
    {7, 5, 6, 1, 8, 1},
    {3, 6, 8, 1, 2, 0},
    {4, 3, 6, 7, 2, 0},
    {4, 3, 6, 8, 1, 1},
    {4, 3, 6, 8, 1, 0},
    {4, 3, 6, 9, 2, 1} }; 
 
    matrix zero;
    matrix one;
    
    split( m, zero, one );
 
    print( zero );
   
    std::cout << "--------------" << std::endl;
   
    print( one );
 
    return 0;
}
https://ideone.com/r5bQfb
1
mat_for_c
164 / 159 / 34
Регистрация: 26.04.2013
Сообщений: 724
Завершенные тесты: 3
30.04.2013, 22:45  [ТС] #6
а правильно я понимаю, что это код для С++11? Если да, то можно его переписать для С++98?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
30.04.2013, 22:54 #7
mat_for_c, правильно. Если не считать инициализацию векторов, то нужно преобразовать только циклы:
C++
1
for( auto& v: src )
станет чем-то вроде этого:
C++
1
for( matrix::const_iterator it=src.begin(); it != src.end(); ++it)
Вот пример для разбора: https://ideone.com/A79WBO
1
-=ЮрА=-
Заблокирован
Автор FAQ
30.04.2013, 23:29 #8
mat_for_c, вот простой алгоритм без С+11
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
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
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
 
/*
int arr[][6] = 
{1,2,3,4,5,1}
{2,3,5,1,8,0}
{7,5,6,1,8,1}
{3,6,8,1,2,0}
{4,3,6,7,2,0}
{4,3,6,8,1,1}
{4,3,6,8,1,0}
[4,3,6,9,2,1}
 
 
1 2 3 4 5 1
7 5 6 1 8 1
4 3 6 8 1 1
4 3 6 8 1 1
 
2 3 5 1 8 0
3 6 8 1 2 0
4 3 6 7 2 0
4 3 6 8 1 0
*/
 
bool isZeroExist(int * vec, int n);
int main()
{
    int i, j;
    int arr[][6] = 
    {
        {1,2,3,4,5,1},
        {2,3,5,1,8,0},
        {7,5,6,1,8,1},
        {3,6,8,1,2,0},
        {4,3,6,7,2,0},
        {4,3,6,8,1,1},
        {4,3,6,8,1,0},
        {4,3,6,9,2,1}
    };
    int m = 8;
    int n = 6;
    vector< vector<int> > mas;
    mas.resize(m);
    cout<<"Input : "<<endl;
    for(i = 0; i < m; i++)
    {
        mas[i].resize(n);
        for(j = 0; j < n; j++)
            cout<<(mas[i][j] = arr[i][j])<<" ";
        cout<<endl;
    }
    vector< vector<int> > mas0;
    vector< vector<int> > mas1;
    for(i = 0; i < m; i++)
    {
        if(isZeroExist(arr[i], n))
            mas0.push_back(mas[i]);
        else
            mas1.push_back(mas[i]);
    }
    cout<<"Vector with zeros in rows : "<<endl;
    for(i = 0; i < mas0.size(); i++)
    {
        for(j = 0; j < mas0[i].size(); j++)
            cout<<mas0[i][j]<<" ";
        cout<<endl;
    }
    cout<<"Vector with nozeros rows : "<<endl;
    for(i = 0; i < mas0.size(); i++)
    {
        for(j = 0; j < mas1[i].size(); j++)
            cout<<mas1[i][j]<<" ";
        cout<<endl;
    }
    mas.resize(0);
    mas0.resize(0);
    mas1.resize(0);
    return 0;
}
 
bool isZeroExist(int * vec, int n)
{
    bool isZero = false;
    for(int j = 0; j < n && !isZero; j++)
        isZero = vec[j] == 0;
    return isZero;
}
1
Миниатюры
vector<vector<double>> => 2 * vector<vector<double>>  
-=ЮрА=-
30.04.2013, 23:30
  #9

Не по теме:

PS:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
mas.resize(m);
* * cout<<"Input : "<<endl;
* * for(i = 0; i < m; i++)
* * {
* * * * mas[i].resize(n);
* * * * for(j = 0; j < n; j++)
* * * * * * cout<<(mas[i][j] = arr[i][j])<<" ";
* * * * cout<<endl;
* * }
- думается мне это всё можно через copy но не захотел думать

0
mat_for_c
164 / 159 / 34
Регистрация: 26.04.2013
Сообщений: 724
Завершенные тесты: 3
30.04.2013, 23:31  [ТС] #10
Спасибо всем, тему можно закрывать.
0
-=ЮрА=-
Заблокирован
Автор FAQ
30.04.2013, 23:39 #11
Если же интересует вариант без доп векторов тогда алгоритм можно воплотить так
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
 
bool isZeroExist(int * vec, int n);
int main()
{
    int i, j;
    int arr[][6] = 
    {
        {1,2,3,4,5,1},
        {2,3,5,1,8,0},
        {7,5,6,1,8,1},
        {3,6,8,1,2,0},
        {4,3,6,7,2,0},
        {4,3,6,8,1,1},
        {4,3,6,8,1,0},
        {4,3,6,9,2,1}
    };
    int m = 8;
    int n = 6;
    vector< vector<int> > mas;
    mas.resize(m);
    cout<<"Input : "<<endl;
    for(i = 0; i < m; i++)
    {
        mas[i].resize(n);
        for(j = 0; j < n; j++)
            cout<<(mas[i][j] = arr[i][j])<<" ";
        cout<<endl;
    }
    cout<<"Vector after split : "<<endl;
    for(i = m - 1; 0 < i ; i--)
    {
        if(isZeroExist(arr[i], n))
        {
            mas.push_back(mas[i]);
            mas.erase(mas.begin() + i);
        }
    }
    for(i = 0; i < m; i++)
    {
        for(j = 0; j < n; j++)
            cout<<mas[i][j]<<" ";
        cout<<endl;
    }
    mas.resize(0);
    return 0;
}
 
bool isZeroExist(int * vec, int n)
{
    bool isZero = false;
    for(int j = 0; j < n && !isZero; j++)
        isZero = vec[j] == 0;
    return isZero;
}
1
Миниатюры
vector<vector<double>> => 2 * vector<vector<double>>  
30.04.2013, 23:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2013, 23:39
Привет! Вот еще темы с ответами:

Ошибка [Linker error] undefined reference to `Vector::Vector(int)' - C++
Добрый день. Делал по методички, и почему-то валятся ошибки... файл lab9_main.cpp #include &lt;iostream&gt; #include &quot;Vector.h&quot; int...

vector<Struct2{int,vector<struct1>}> или множественное наследование ... - C++
Здравствуйте! Помогите, пожалуйста. Есть такие данные: typedef struct { int x; int y; // координаты...

Как корректно скопировать vector в vector внутри класса - C++
Есть класс принимающий в конструкторе vector: class test { test(std::vector&lt;std::string&gt; codeList); ~test(); ...

Указатель на объект вектор в векторе vector < vector<int>* >* - C++
Дело касается вот чего, есть такая вот незатейлевая вещь. #include &lt;vector&gt; #include &lt;iostream&gt; int main( ) { using...


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

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

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