Должен ли это быть вектор векторов?
Если нет, то вы, вероятно, могли бы реализовать обертку над обычным вектором строк * элементов столбцов.
Что-то вроде:
class Vector
{
public:
int operator[]( int index )
{
return 1;
}
friend class Wrapper;
private:
Vector( std::vector<int> & vector, int index, int numElements );
std::vector<int> v_;
int index_;
int numElements_;
};
class Wrapper
{
public:
Vector operator[](int index)
{
return Vector( v_, index, numColumns_ );
}
Wrapper( int numRows, int numColumns);
void setNumRows( int numRows );
void setNumColumns( int numColumns );
private:
std::vector<int> v_;
int numRows_;
int numColumns_;
};
и в основном:
Wrapper w;
int i = w[1][1];
РЕДАКТИРОВАТЬ:
Класс Vector будет представлять данные строки или столбца.В качестве параметров требуется линеаризованная матрица, геометрия матрицы (количество строк и столбцов) и какая строка / столбец она представляет.
Попробуйте это карандашом и бумагой: 1. запишите элементы матрицы 3х4 в матричной форме
11 12 13 14 21 22 23 24 31 32 33 34
- написать их линеаризованным способом:
11 12 13 14 21 22 23 24 31 32 33 34
Существует простая связь между индексами элемента из матричной формы иего индекс в линеаризованной форме, который зависит от геометрии матрицы.
- , если вы хотите, чтобы вектор «содержал» элементы 21 22 23 24 (или 12 22 32), то вам нужно реализовать некоторую логику вваш оператор [] (int index), который будет определять индекс в базовом векторе элемента из Vector [index].
Скажем, ваш Vector должен ссылаться на второй столбец из матрицы (т.е. 1222 32).Тогда: - первый элемент в векторе (т.е. Vector [1]) является вторым элементом в линеаризованной матрице - второй элемент в векторе, 22, является 6-м элементом из базового вектора - третий элемент в векторе,32, является 10-м элементом v_
Теперь с карандашом и бумагой сделайте то же самое для третьего столбца матрицы (элементы 13, 23, 33).Посмотрите, заметили ли вы сходство между индексами в базовом векторе для второго столбца (которые были 2, 6 и 10) и индексами, которые вы найдете для третьего столбца.