2013-10-27 3 views
1

Привет всем Есть ли способ вернуть первый 5 элементов в векторе с помощью векторного итератора?return top 5 значение с использованием векторного итератора

В этом примере у меня есть только значение в самом векторе.

// vector::begin/end 
#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<int> myvector; 
    for (int i=1; i<=10; i++) myvector.push_back(i); 

    std::cout << "myvector contains:"; 
    for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it) 
    std::cout << ' ' << *it; 
    std::cout << '\n'; 

    return 0; 
} 

Хммм спасибо за все быстрый ответ .. но почему у меня возникают ошибки компиляции, когда я пытаюсь поставить их в функцию?

void Test::topfives() 
{ 
    topfive.assign(point1.begin(), point1.end()); 
    sort(topfive.begin(), topfive.end(), sortByCiv); 
} 

void Test::DisplayTopFiveResult() 
{ 
    test.topfives(); 

    copy(topfive.begin(), topfive.begin()+ min(topfive.size(), (size_t)5), 
    ostream_iterator<Level>(cout << level.displayClassresult())); 
} 

ответ

3

заранее myvector.begin() по 5

std::copy(myvector.begin(), 
      myvector.begin()+std::min(myvector.size(), (size_t)5), 
      std::ostream_iterator<int>(std::cout,"\n")); 

Это печатает при макс вершине 5 элементов из myvector

См Here

Ссылка: - std::copy, std::min и std::ostream_iterator

+0

myvector.begin() + мин (myvector.size(), 5) –

+0

@Caesar благодарит, обновляется как DanielT. прокомментировал – P0W

1
#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector<int> myvector; 
    for (int i=1; i<=10; i++) myvector.push_back(i); 

    std::cout << "myvector contains:"; 
    std::vector<int>::iterator it = myvector.begin() 
    for (int i = 0; i < 5 && it != myvector.end(); i++) { 
    std::cout << ' ' << *it; 
    ++it; 
    } 
    std::cout << '\n'; 

    return 0; 
} 
1

станд :: вектор поддерживает random access iterators, что означает, что вы можете сделать это:

myvector.begin() + 5 

Так два варианта кода:

std::cout << "myvector contains:"; 
size_t maxElements = std::min(myvector.size(), size_t(5)); 
for (size_t i = 0; i < numElements; ++i) { 
    std::cout << ' ' << myvector[i]; 

или

auto startIt = myvector.begin(); 
auto endIt = myvector.begin() + 5; 
for (auto it = startIt; it != endIt; ++it) 
    std::cout << ' ' << *it; 
+0

'std :: min (myvector.size(), (size_t) 5),' – P0W

+0

@ P0W Ясно, что я становлюсь ленивым в старости :) Исправлено, спасибо :) – kfsone

+0

«Из-за способа реализации вектора ». Нет, это из-за * интерфейса *, а не реализации. –

Смежные вопросы