Рекомендации по улучшению трехмерного векторного класса - PullRequest
0 голосов
/ 15 мая 2019

В остальном код работает, но мне кажется, что мне не хватает реализации, я просто не знаю, что именно реализовать. Некоторые рекомендации, пожалуйста.

Вероятно, эффективность?

Выполнены следующие реализации:

// Функции

Resize resize ()
Назначить назначение ()
Доступ доступа ()
Move move ()
Найти get_pos ()
Копировать в 2D векторную копию ()
Копировать в 1D векторную копию ()

// Операторы

Вставка << <br> Выписка >>
Приравнять =

// matrix.h

#pragma once
#include <iostream>
#include <cstring>
#include <vector>
#include "dimensional_size.h"
using namespace std;
#define _MATRIX_H_

template<typename type, size_t _breadth = 0, size_t _height = 0, size_t _width = 0>
class matrix {
public:
    matrix();
    ~matrix();
    void resize(size_t new_breadth, size_t new_height = 0, size_t new_width = 0);
    void assign(type obj, pos z, pos y, pos x);
    type access(pos z=0, pos y = 0, pos x = 0);
    void move(dimensional_pos<type> old_pos, dimensional_pos<type> new_pos);
    size_t get_capacity();
    vector<vector<type> >& copy(vector<vector<type> > dest, pos z = 0, pos y = 0, pos dest_z = 0);
    vector<type>& copy(vector<type> dest, pos z = 0, pos y = 0);
    dimensional_pos<type> get_loc(type& t);
    void operator<<(type t);
    void operator>>(type t);
    matrix<type, _breadth, _width, _height> operator=(matrix<type, _breadth, _height, _width> obj);
private:
    dimensional_size<_breadth, _height, _width> size_obj;
    vector<vector<vector<type> > > dat;
};

// dimensional_size.h

dimension_size.h предоставляет структуру данных «dimension_size» и класс «dimension_pos» с определением типа «pos» как длинное целое число без знака

#pragma once
#include <iostream>
#include <stdarg.h>
#include <vector>
#define _DIMENSIONAL_SIZE_H_ 
using namespace std;

template<size_t z, size_t y, size_t x>
struct dimensional_size {
    dimensional_size();
    ~dimensional_size();
    size_t get_capacity();
    size_t get_breadth();
    size_t get_height();
    size_t get_width();
    void up_size(size_t z = 0, size_t y = 0, size_t x = 0);
private:
    size_t absolute_x;
    size_t absolute_y;
    size_t absolute_z;
};

template<typename type>
class dimensional_pos {
public:
    dimensional_pos();
    dimensional_pos(pos z = 0, pos y = 0, pos x = 0);
    ~dimensional_pos();
    dimensional_pos& get_pos(vector<type> stream, type& t);
    dimensional_pos& get_pos(vector<vector<type> > stream, type& t);
    dimensional_pos& get_pos(vector<vector<vector<type> > > stream, type& t);
    pos get_z();
    pos get_y();
    pos get_z();
private:
    pos absolute_x;
    pos absolute_y;
    pos absolute_z;
};

Пример стиля масштабирования по вектору для поиска объекта типа

template<typename type>
dimensional_pos<type>& dimensional_pos<type>::get_pos(vector<vector<vector<type> > > stream, type& t) {
    dimensional_pos<type> obj;
    for (pos i = 0; i < stream.size(); i++) {
        for (pos j = 0; j < stream[i].size(); j++) {
            for (pos k = 0; k < stream[i][j].size(); k++) {
                if (t == stream[i][j][k]) {
                    obj(i, j, k);
                    return obj;
                }
            }
        }
    }
}

Никаких ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...