Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
5 / 5 / 2
Регистрация: 07.04.2016
Сообщений: 88
1

Присвоение значений элементам двумерного вектора

16.01.2018, 21:51. Просмотров 2600. Ответов 7
Метки нет (Все метки)

Недавно добрие люди помогли мне со следующим кодом

1 код

C++
1
2
3
4
5
6
7
8
vector<vector<char>> vv;
// ...
for (auto row_it = vv.begin() + х; row_it != vv.end(); ++row_it) {
    vector<char> &row = *row_it;
    for (auto col_it = row.begin() + y; col_it != row.end(); ++col_it) {
        // ...
    }
}
Мне нужно присваивать из одного вектора в другой

2 код

C++
1
object2[i][j] = object1[mainCount1][mainCount2++];
Вопрос такой, как мне также по индексах присваивать используя первую конструкцию, или хотя б делать по аналогии такие манипуляции?

Кстати, первый код у меня также не работает, пишет что row_it and col_it does not name a type...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2018, 21:51
Ответы с готовыми решениями:

Присвоение значений элементам двумерного динамического массива
Я недавно начал программировать на языке С++, поэтому, естественно, многого не понимаю :( Вот...

Присвоение элементам массива значений структуры
Доброго дня. У меня возникла проблема с присвоением элементам массива значений структуры. В чем...

Присвоение значений элементам вложенной структуры
Необходимо присвоить значение элементам массива структур struct message { unsigned char code;...

Присвоение значений всем элементам массива
Как присвоить значение всем элементам массива наиболее простым способом думал что double...

7
(80 / 20 || 50 / 50) = x
1683 / 1151 / 439
Регистрация: 16.08.2014
Сообщений: 4,836
Записей в блоге: 1
16.01.2018, 22:22 2
djedaimo,
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
#include <vector>
 
int main(int argc, char* argv[] )
{
    std::vector<char> vector {'1', '2', '3'};
    std::vector<char> vectorOut(vector.size() );
 
    for (auto it = vector.begin(), itOut = vectorOut.begin();
        it != vector.end(); ++it, ++itOut)
            *itOut = *it;
 
    // или
 
    vectorOut.clear();
    vectorOut.resize(vector.size() );
    std::copy(vector.begin(), vector.end(), vectorOut.begin() );
 
    // или
 
    vectorOut.clear();
    vectorOut.resize(vector.size() );
    for (size_t i = 0; i < vector.size(); ++i)
        vectorOut[i] = vector[i];
 
    return 0;
}
0
5 / 5 / 2
Регистрация: 07.04.2016
Сообщений: 88
16.01.2018, 22:35  [ТС] 3
щас, я испробую и разберусь, спасибо)

Добавлено через 1 минуту
а как работать с двухмерним вектором, мне кажеться у тебя 2 одномерние
0
(80 / 20 || 50 / 50) = x
1683 / 1151 / 439
Регистрация: 16.08.2014
Сообщений: 4,836
Записей в блоге: 1
17.01.2018, 11:35 4
djedaimo, как то так
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
#include <cstddef>
#include <vector>
 
int main(int argc, char* argv[] )
{
    const std::size_t SIZE = 3;
 
    std::vector<std::vector<char> > vector
    {
        std::vector<char> {'1', '2', '3'},
        std::vector<char> {'1', '2', '3'},
        std::vector<char> {'1', '2', '3'}
    };
    std::vector<std::vector<char> > vectorOut
    {
        std::vector<char>(SIZE),
        std::vector<char>(SIZE),
        std::vector<char>(SIZE),
    };
 
    for (size_t i = 0; i < vector.size(); ++i)
        for (size_t j = 0; j < vector.size(); ++j)
            vectorOut[i][j] = vector[i][j];
 
    return 0;
}
0
5 / 5 / 2
Регистрация: 07.04.2016
Сообщений: 88
18.01.2018, 00:37  [ТС] 5
А если двумерный вектор не квадратный и ширина и высота не равни друг другу?Мне нужно как раз такой
0
1740 / 1333 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
18.01.2018, 00:48 6
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
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <iterator>
#include <random>
 
int main()
{
    std::default_random_engine gen{ std::random_device()() };
    std::uniform_int_distribution<> dist(-20, 20);
    std::size_t n = 4, m = 5;
    std::vector <std::vector<int>> A(n, std::vector<int>(m)), B(n);
    std::cout << "Matrix A:\n";
    for (auto &R : A) {
        std::generate(R.begin(), R.end(), [&dist, &gen] { return dist(gen); });
        std::copy(R.cbegin(), R.cend(), std::ostream_iterator <int>(std::cout, "\t"));
        std::cout << '\n';
    }
    for (std::size_t i = 0; i < n; i++)
        for (std::size_t j = 0; j < m; j++)
            B[i].push_back(A[i][j]);
    std::cout << "Matrix B:\n";
    for (auto &R : B) {
        std::copy(R.cbegin(), R.cend(), std::ostream_iterator <int>(std::cout, "\t"));
        std::cout << '\n';
    }
    system("pause");
}
0
1714 / 605 / 187
Регистрация: 12.03.2016
Сообщений: 2,187
18.01.2018, 12:18 7
Hitoku, вместо строк 19 - 21 достаточно
C++
1
B = A;
0
5 / 5 / 2
Регистрация: 07.04.2016
Сообщений: 88
19.01.2018, 01:22  [ТС] 8
вот как раз мне сказали (я задавал схожый вопрос в другой теме)что не нужно переменних по типу m и n, а сделать чисто по векторному). Присвание масивов мне не подходит)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 void SimplePlussingObjects(vector <vector<char> > object1, int heightOfObject1, int widthOfObject1, int positionx, int positiony, vector<vector<char> > object2, int heightOfObject2, int widthOfObject2){
            int mainCount1 = 0, mainCount2 = 0;
            
            for(int i = positionx;i<widthOfObject1+positionx;i++){
                mainCount1++;
                for(int j = positiony;j<heightOfObject1+positiony;j++){
                    if(mainCount2>heightOfObject1)mainCount2 = 0;
                    object2[i][j] = object1[mainCount1][mainCount2++];
                }
            }
            
            for(int i = 0;i<heightOfObject2;i++){
                for(int j = 0;j<widthOfObject2;j++){
                    cout<<object2[i][j];
                }
                cout<<endl;
            }
        }

В етом коде мне нужно начиная с определенной позиции присвоить один масив другому, тоесть как бы сливает два вектора один поверх другого.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2018, 01:22

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Использование вектора для присваивания значений элементам структуры
Здравствуйте, форумчане. Сразу отмечу, что я новичек, так что, возможно, мой вопрос покажется вам...

Считывание значений двумерного вектора
ну вот собственно и проблема не массива, а вектора именно #include &lt;vector&gt; using namespace...

Присвоение значений элементам массива
Пишу на С простенькую функцию exchange(), которая элементу массива a присваивает значение элемента...

Присвоение значений элементам в структуре
#include &lt;string.h&gt; #include &lt;iostream.h&gt; using spacename std; struct mystruct { ...


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

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

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