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 29 30 31 32 33 34 35 36 37 38 39 40
|
#include <iostream>
#include <vector>
#include <algorithm>
// determines the dimensionality structure of a vector of vectors of ...
template <typename T>
void determine_array_dimensionality( std::vector<int>& arrayDimensionality, const std::vector<T>& matrix )
{
if ( std::is_scalar<T>::value ) {
arrayDimensionality.push_back(matrix.size());
arrayDimensionality.shrink_to_fit();
}
else {
arrayDimensionality.push_back(matrix.size());
determine_array_dimensionality(arrayDimensionality, matrix[0]);
std::vector<int> sizes;
for (auto i : matrix)
sizes.push_back(i.size());
if ( !(std::adjacent_find( sizes.begin(), sizes.end(), std::not_equal_to<int>() ) == sizes.end()) ) {
std::cout << "determine_array_dimensionality template inconsistence.\n";
std::cout << "Not all vectors in \"matrix\" argument have the same dimensionality.\n";
exit( EXIT_FAILURE );
}
}
} // end template determine_array_dimensionality
int main() {
std::vector<std::vector<int>> v;
std::vector<int> dimensions;
v.resize(3);
v[0] = {0,1,2,3,4,5,6,7,8,9};
v[1] = {0,1,2,3,4,5,6,7,8,9};
v[2] = {0,1,2,3,4,5,6,7,8,9};
determine_array_dimensionality(dimensions, v);
}
| |