C++ 显示集合的第一个元素

C++ 显示集合的第一个元素,c++,c++11,printing,c++14,C++,C++11,Printing,C++14,我尝试显示std::set的第一个元素。每次我都想显示剩余的元素 例如一组:4689 第一个元素是4,其余元素是6 8 9 前两个元素是46,其余的是89 然后前三个元素是4、6、8其余的:9 我开始使用的代码是: for (std::set<int>::iterator it = my_set.begin(); it != my_set.end(); ++it) { std::vector<decltype(*it)> items((my_set.b

我尝试显示
std::set
的第一个元素。每次我都想显示剩余的元素

例如一组:
4689

  • 第一个元素是
    4
    ,其余元素是
    6 8 9

  • 前两个元素是
    46
    ,其余的是
    89

  • 然后前三个元素是
    4、6、8
    其余的:
    9

我开始使用的代码是:

for (std::set<int>::iterator it = my_set.begin(); it != my_set.end(); ++it)
{
        std::vector<decltype(*it)> items((my_set.begin()), *it);
        // items is a vector containing successively the n first elements
}
for(std::set::iterator it=my_set.begin();it!=my_set.end();++it)
{
std::向量项((my_set.begin()),*it);
//items是依次包含n个前元素的向量
}
使用这段代码时,我会出现错误,并且在显示第一个元素之后,我无法拥有集合的其余部分。
您能帮助我吗?

如果您想为
N
第一个元素和其余元素提供独立的函数:

#include <set>
#include <iostream>

using namespace std;

template<typename T>
void printHead(set<T>& mySet, unsigned int position) {
    for (auto it = mySet.begin(); it != next(mySet.begin(), position); it++) {
        cout << *it << ' ';
    }

    cout << endl;
}

template<typename T>
void printTail(set<T>& mySet, unsigned int position) {
    for (auto it = next(mySet.begin(), position); it != mySet.end(); it++) {
        cout << *it << ' ';
    }

    cout << endl;
}

int main(void) {
    set<int> foo{0, 1, 2, 3, 4, 5, 6, 7};
    const auto N = 3;

    cout << "First " << N << " elements: ";
    printHead(foo, N);

    cout << "The rest: ";
    printTail(foo, N);
}
#包括
#包括
使用名称空间std;
模板
无效打印头(设置和设置,无符号整数位置){
for(auto it=mySet.begin();it!=next(mySet.begin(),position);it++){

cout您正在寻找的向量构造函数是使用迭代器的:

std::vector<std::decay_t<decltype(*it)>> items(my_set.begin(), it);

听起来你需要两个循环。我相信你在寻找std::Partition如果你有错误,通常将它们粘贴到问题Simpler to pass iterator而不是container+position中会很有帮助。
std::next
可能会有帮助。我不想要pass iterator,我想要pass container and position to function,它会为你计算迭代器我是。但是下一步使用
是个好主意,所以我编辑了我的代码。
template <typename IT>
void print(IT begin, IT end)
{
    const char* sep = "";
    for (auto it = begin; it != end; ++it) {
        std::cout << sep << *it;
        sep = ",";
    }
}

int main()
{
    std::set<int> s{4, 6, 8, 9};

    for (auto it = std::next(s.begin()); it != s.end(); ++it) {
        std::cout << "First elements: "; print(s.begin(), it);
        std::cout << ", Rest: "; print(it, s.end()); std::cout << std::endl;   
    }
}