2-D вектор со структурами: как хранить элементы? - PullRequest
0 голосов
/ 21 февраля 2020

В настоящее время у меня есть такая структура:

struct point {
    int x;
    int y;
};    

Теперь внутри функции я пытаюсь объявить двумерный вектор и сохранить в нем элементы.

void foo (){
    vector< vector<int> > v;

    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
            //I want to store the number '0' in each spot. Not sure how to do it.
            //Attempted method: v[i][j].push_back(0);
        }
    }
}

По сути, я хочу, чтобы конечный результат был:

0 0 0 0 0 0 0 0 0 0
0       . . . 
0       . . .
0       . . .
0       . . .
0       . . . 
0       . . .
0       . . .
0       . . .
0       . . .

Ответы [ 3 ]

0 голосов
/ 21 февраля 2020

Если ваши массивы имеют статус c, используйте вместо него std :: array

std::array<std::array<int,10>,10> v;

для хранения значения

v[x][y] = 42;
0 голосов
/ 21 февраля 2020

Другой вариант, чем делать это вручную, - использовать правильный конструктор для вашей задачи.

Используя это

auto myvec = std::vector<std::vector<int>>(10, std::vector<int>(10, 0));

, вы получите двумерный вектор из 10 строк и 10 столбцов, инициализированный 0 в каждой позиции.

0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0

Однако я также хотел бы знать, как ваша упомянутая структура связана с вашим вопросом инициализации 2D-вектора. Возможно, вы хотели поместить вашу структуру в качестве базового типа внутреннего вектора?
Или вы просто используете свою точечную структуру в качестве средства для индексации своего вектора, и в этом случае она не будет действительно релевантной для вашего вопроса?

0 голосов
/ 21 февраля 2020

Полагаю, вы хотите сохранить координаты точек. Используя struct, вы получаете код, похожий на тот, который у вас есть, вам нужно что-то вроде этого:

Ссылка на живой пример

#include <iostream>
#include <vector>

using std::vector;
using std::cout;
using std::endl;

struct point {
    public:
    int x;
    int y;
    int value; // to store the value of each point
}; 

int main()
{ 
    vector< vector<point> > v;

    for (int i = 0; i < 10; i++){
        vector<point> temp;
        for (int j = 0; j < 10; j++){
            temp.push_back({i, j, 0}); // insert coordinates and value, 0 or other
        }
        v.push_back(temp);
    }

     for (vector<point> vp : v){ //print the values stored in the value field
        for (point value : vp){  //u can also access it using v[i][j].value in a normal for
            cout << value.value << ' ';   
        }
         cout << endl;
     }
} 
...