Как перебрать первые десять элементов из контейнера - PullRequest
0 голосов
/ 02 мая 2018

Я хочу напечатать только первые 10 вставленных элементов, оставив остальные. Какой код я должен использовать (вместо использования myset.end()) для печати только первых 10 целых чисел вместо печати каждого целого числа.

int main ()
{
std::set<int> myset;
std::set<int>::iterator it;

// set some initial values:
for (int i=1; i<=20; ++i) 
    myset.insert(i*10);    

std::cout << "myset contains:";
for (it=myset.begin(); it!=myset.end(); ++it)
std::cout << *it << ' ';
std::cout << "\n\n";

return 0;
}

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Я бы сделал это так:

int nCount = 0;
for (it=myset.begin(); nCount<10 && it!=myset.end(); ++nCount, ++it)
{
    std::cout << *it << ' ';        
}

Надеюсь, это поможет.

0 голосов
/ 02 мая 2018

Вы можете использовать std::next следующим образом:

const auto begin = myset.begin();
const auto end = myset.size() < 10 ? myset.end() : std::next(begin, 10);
for (auto it = begin; it != end; ++it) {
    std::cout << *it << ' ';
}
0 голосов
/ 02 мая 2018

Вы можете просто сохранить переменную count и разорвать цикл, как только он достигнет 10 или достигнет myset.end().

int main ()
{
    std::set<int> myset;
    std::set<int>::iterator it;

    // set some initial values:
    for (int i=1; i<=20; ++i) 
        myset.insert(i*10);    

    int count = 0;
    std::cout << "myset contains:";
    for (it=myset.begin(); count < 10 && it!=myset.end(); ++it, ++count)
        std::cout << *it << ' ';

    std::cout << "\n\n";

    return 0;
}
...