草庐IT

c++ - 实现可在 C++ 中迭代的优先级队列

我需要为一个项目实现一个优先级队列,但是STL的priority_queue没有显示,因为我们需要遍历所有元素并随机删除它们。我们正在考虑为此使用STL的set,将其包装在一个类中以使其成为ADT。是否有更智能的解决方案?我们怎样才能使set的一些公共(public)成员函数可以公开使用?我们对迭代器等感兴趣。显然推导STL是不明智的,因为缺少虚拟析构函数:/新代码:#ifndefPRIORITYQUEUE_H_#definePRIORITYQUEUE_H_#includetemplateclassimpl_type=std::set>classPriorityQueue{typede

c++ - 如何比较 std::set 的前 N ​​个元素?

如何比较两个集合的前“n”个元素是否相等?我的以下程序不起作用,为什么?#include#include#include#includeusingnamespacestd;intmain(){intn=2;intmyints1[]={75,23,65,42,13};intmyints2[]={70,23,65,42,13};setmyset1(myints1,myints1+5);setmyset2(myints2,myints2+5);if(std::equal(myset1.begin(),myset1.begin()+n,myset2.begin()))//errorstd::c

c++ - 从两个 vector 中删除公共(public)实体?

假设我有vector,vector如何从它们中删除公共(public)实体我已经为class1对象class1a,class1b定义了==operator 最佳答案 stlalgorithms提供几个函数来执行集合操作,特别是计算setsymmetricdifference,这就是您所需要的。这是一个使用示例:#include#includeintmain(intargc,char**argv){std::vectorv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push

c++ - std::merge 不适用于 std::async

我想在一个单独的线程中合并两个vectorintmain(){vectora(100);vectorb(100);vectorc(200);std::async(std::launch::async,std::merge,a.begin(),a.end(),b.begin(),b.end(),c.begin());}这不编译main.cpp:Infunction‘intmain()’:main.cpp:17:25:error:nomatchingfunctionforcallto‘async(std::launch,,std::vector::iterator,std::vector:

c++ - 为什么 std::search 需要转发迭代器

我的问题与下面的线程相同,我很难理解给出的答案,或者更确切地说,我的代码不应该工作,因为它只使用输入迭代器..但我的func似乎工作并且行为与std相同::search..所以我很茫然,不愿意在没有正确理解的情况下继续前进......也许如果有人可以提出一个会破坏我的功能但不会破坏std::的输入来自WhydoIneedaForwardIteratortoimplementmycustomizedstd::search:Iamstudyingthebook"AcceleratedC++"fromKoenig&Moo.Exercise8-2askmetoimplementonmyowns

c++ - `std::string::begin()`/`std::string::end()` 迭代器失效?

#include#includeintmain(){std::strings="abcdef";std::strings2=s;autobegin=const_cast(s2).begin();autoend=s2.end();std::cout此代码将begin()const的结果与end()的结果混合在一起。这些函数都不允许使任何迭代器失效。但是我很好奇end()不使迭代器变量begin无效的要求是否实际上意味着变量begin可用于结束。考虑一个C++98,std::string的写时复制实现;非常量begin()和end()函数导致复制内部缓冲区,因为这些函数的结果可用于修改字符

c++ - priorC++11 中的 std::vector::begin() 是否等同于 C++11 中的 std::vector::data()?

是std::vector::begin()来自之前-C++11相当于std::vector::data()在C++11中?我问这个的原因是,在C++11之前,我曾经将std::vector::begin()视为指针,但在C++11之后,它不是,而且我不能转换为等效的指针。那么,我可以在C++11之后改用data()吗? 最佳答案 不,begin返回一个迭代器,而data返回一个指针。对于给定的实现,这些可能是同一件事,但您不应该指望这一点。 关于c++-priorC++11中的std::

c++ - 奇怪的错误,set<int>::begin() 总是返回 const 迭代器

为什么set.begin()总是返回一个const迭代器而不是标准迭代器?35inttest(){36std::setmyset;37myset.insert(2);38myset.insert(3);39int&res=*myset.begin();40returnres;41}test.cpp:39:error:invalidinitializationofreferenceoftype‘int&’fromexpressionoftype‘constint’ 最佳答案 它没有返回const_iterator,而不是std::se

c++ - 使用 std::begin 和 std::end 进行 vector 初始化

为什么可行?有两个不同的字符串"testString"但vector大小分配正确。#include#include#includeintmain(){std::vectorstr;str.assign(std::begin("testString"),std::end("testString"));copy(str.begin(),str.end(),std::ostream_iterator(std::cout,""));std::cout 最佳答案 你很幸运,编译器执行了stringpooling优化。请注意,您所做的仍然是未定

c++ - C++中的 "for each"循环如何知道数组的长度

我正在查看来自http://www.cplusplus.com/doc/tutorial/arrays/的以下示例我不知道第二个for循环是如何工作的。for循环如何知道数组何时结束。如果它能解决这个问题,为什么第一个循环不使用类似的方法?我的印象是无法确定数组的长度。我不确定如何调和这些概念。谢谢!编辑:感谢所有出色的回答!#includeusingnamespacestd;intmain(){intmyarray[3]={10,20,30};for(inti=0;i 最佳答案 之所以可行,是因为for循环有效地1使用了std::