Чтобы сделать код более читабельным, лучше использовать стандартные алгоритмы.
Например
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<std::vector<int>> foo =
{
{ 1, 2, 3, 4}, { 1, 2 }, { 1, 2, 3, 4, 5 }, { 1, 2, 3 }
};
auto min_size = []( const auto &v1, const auto &v2 )
{
return v1.size() < v2.size();
};
auto it = std::min_element( std::begin( foo ), std::end( foo ), min_size );
for ( const auto &value : *it ) std::cout << value << ' ';
std::cout << '\n';
return 0;
}
Вывод программы:
1 2
Если ваш компиляторподдерживает стандарт C ++ 17, тогда лямбда-выражение также можно записать в виде
auto min_size = []( const auto &v1, const auto &v2 )
{
return std::size( v1 ) < std::size( v2 );
};
Если использовать циклы, как вы делаете, тогда для экранирования двух циклов, которые находят вектор с минимальным размером, вы можете написать
#include <iostream>
#include <vector>
int main()
{
std::vector<std::vector<int>> foo =
{
{ 1, 2, 3, 4}, { 1, 2 }, { 1, 2, 3, 4, 5 }, { 1, 2, 3 }
};
using size_type = std::vector<std::vector<int>>::size_type;
size_type min_vector = 0;
for ( size_type i = 1; i < foo.size(); ++i )
{
if ( foo[i].size() < foo[min_vector].size() )
{
min_vector = i;
}
}
for ( const auto &value : foo[min_vector] ) std::cout << value << ' ';
std::cout << '\n';
return 0;
}