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
|
#include <vector>
using std::vector ;
vector<int> get_slice( const vector<vector<int>>& da,
std::size_t row, std::size_t from_col = 0 )
{
return row < da.size() && from_col < da[row].size()
? vector<int>( da[row].begin() + from_col, da[row].end() )
: vector<int>() ;
}
#include <functional>
vector< std::reference_wrapper<int>> get_slice( vector<vector<int>>& da,
std::size_t row, std::size_t from_col = 0 )
{
return row < da.size() && from_col < da[row].size()
? vector< std::reference_wrapper<int>>( da[row].begin() + from_col, da[row].end() )
: vector< std::reference_wrapper<int>>() ;
}
#include <iostream>
int main()
{
vector<vector<int>> data{ {1,2,3,4}, {12,33,44,55}, {6,7,8}, {12,3,4,5} };
for( int i : get_slice( data, 1, 1 ) ) // {33,44,55} (starting from 1)
std::cout << i << ' ' ;
std::cout << '\n' ;
for( auto& ref : get_slice( data, 1, 1 ) ) ref += 100 ;
for( int i : get_slice( data, 1, 1 ) ) std::cout << i << ' ' ;
std::cout << '\n' ;
}
|