Поскольку ваш класс представляет собой 2-мерную матрицу, вы можете захотеть вернуть подмножество векторных данных, которое не обязательно является последовательным диапазоном в векторе.Например, вы можете захотеть вернуть один столбец матрицы, даже если кажется, что вы храните его в главном порядке строк, или вы можете захотеть вернуть диагональные элементы матрицы.В этом случае решения, приведенные в комментариях (которые предлагают возвращать указатель на векторные данные или возвращать пару итераторов), не будут работать, поскольку вам нужно будет исключить определенные элементы из диапазона, указанного вэти значения.
Если это так, одну вещь, которую вы можете сделать, это вернуть вектор int
s, которые являются индексами, в вектор data
матрицы.Этот вектор индексов будет тем, что вы ищете: подмножество, которое не обязательно появляется последовательно в векторе data
.
Вы можете перегрузить оператор индекса matrix2D
, чтобы принять такую коллекцию ивернуть специальный временный тип с семантикой присваивания для подмножества matrix2D
, чтобы вы могли написать код вроде:
int main(int argc, char **argv) {
matrix2d matrix4x4(4, 4);
std::vector<float> values(4, 1);
auto first_column = matrix4x4.first_column();
matrix4x4[first_column] = values;
matrix4x4.print();
// output is:
// 1 0 0 0
// 1 0 0 0
// 1 0 0 0
// 1 0 0 0
}
Таким образом, вы могли не только получить доступ к подмножествам значений в матрице, но и изменитьподмножество.
Вот быстрая реализация этой идеи, которая должна продемонстрировать приведенный выше пример: https://ideone.com/j5DfBg
Очевидно, что вы могли бы сделать много улучшений в этом дизайне, но, надеюсь, вы получитеточка.