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;
}
}