草庐IT

partial_sort_copy

全部标签

c++ - 如何结合 std::copy_if 和 std::transform?

考虑以下代码片段:迭代第一种类型T1的一个容器以创建第二种类型T2的第二个容器,应用转换函数T1->T2但仅适用于验证谓词的T1元素(T1->bool)(在下面的例子中是奇数)。std::vectormyIntVector;myIntVector.push_back(10);myIntVector.push_back(15);myIntVector.push_back(30);myIntVector.push_back(13);std::vectormyStringVectorOfOdd;std::for_each(myIntVector.begin(),myIntVector.end

c++ - std::sort with equal elements 给出段错误

我有一个存储指针的容器。我正在尝试根据指针指向的相应对象中的数据成员以非递增顺序对这些指针进行排序。在我的例子中,许多对象可能对该数据成员具有相同的值。下面是一个简短的代码来说明这个问题。对排序函数的调用给出了段错误。奇怪的是,如果我在容器中有16个元素指向具有相同double值的对象,则排序似乎有效。但是,如果我有17个元素指向具有相同值的对象,则会出现段错误。谁能解释一下为什么会这样?#include#include#include//someclassclassA{public:doublea;A(doubleaval);};A::A(doubleaval):a(aval){}/

c++ - 为什么仅当我们返回 *this 时才调用 Copy 构造函数?

ClassCents(){intm_val;public:Cents(intx=0){cout(1)}假设我有Centsobjectobj并且正在调用obj.Add()现在输出将是ConstructorCopyconstructor所以我的假设是Here通过在(1)中返回*this我们将*this对象值复制到一个新的临时Cents对象。这就是复制构造函数被调用的原因。现在,如果我将第(1)行替换为CentsAdd(intval){Centstemp;returntemp;}//--->(2)唯一的输出是Constructor为什么没有调用复制构造函数?我对第(1)行的假设是错误的吗?

c++ - std::copy 用于多维数组

前几天我用gcc-4.9.1试过:intmain(){inta[10][20][30];intb[10][20][30];::std::copy(::std::begin(a),::std::end(a),::std::begin(b));return0;}当然,它产生了一个错误:Infileincludedfrom/usr/include/c++/4.9.2/bits/char_traits.h:39:0,from/usr/include/c++/4.9.2/ios:40,from/usr/include/c++/4.9.2/ostream:38,from/usr/include/c

c++ - 性能与可读性 : Local copies in functions

考虑以下代码:Vector2fBox::getCenter()const{constfloatx=width/2;constfloaty=height/2;returnVector2f(x,y);}这样写会不会提高性能:Vector2fBox::getCenter()const{returnVector2f(width/2,height/2);}我更喜欢第一个,因为它漂亮且可读,但我开始怀疑如果我这样做太多,我是否会失去一些性能,因为它会创建一个额外的不必要的拷贝。我知道你们中的一些人认为第二个函数同样可读,但这只是一个例子,我想问的更笼统,在这种情况下什么是好的编码实践。

c++ - 是否可以将 std::sort 与带有额外参数的排序函数一起使用?

这是我考虑了一段时间的事情。我做了一些研究,在上面找不到任何东西,但我也没有发现任何相反的东西。考虑std::sort在中发挥作用.它需要两个迭代器和一个函数指针作为参数。因此,如果我想按字母顺序对字符串vector进行排序,我会这样做:boolascending(std::stringlhs,std::stringrhs){returnlhs问题在于这种类型的排序函数区分大小写,因此会将以小写字母“a”开头的字符串放在以大写字母“Z”开头的字符串之后。我看到的唯一可见的解决方案是按照boolascending_case_insensitive()创建一个附加功能.但是,如果我能有一个

c++ - 如何使用 std::copy 直接从文件流读取到容器?

我遇到了一个很酷的STL示例,它使用istream_iterators将标准输入(cin)复制到vector。vectorcol1;copy(istream_iterator(cin),istream_iterator(),back_inserter(col));我将如何执行类似于从文件流直接读取到容器中的操作?假设它是一个包含以下内容的简单文件:“敏捷的棕色狐狸跳过了懒惰的狗。”我希望每个单词在复制行之后成为vector中的一个单独元素。 最佳答案 打开文件成功后将cin替换为文件流对象:ifstreamfile("file.tx

c++ - 就地 std::copy_if

在我看来,std::copy_if对于过滤容器非常有用:std::vectorvec{1,2,3,4};autoitEnd=std::copy_if(vec.begin(),vec.end(),vec.begin(),[](inti){returni>2;});vec.resize(itEnd-vec.begin());但是,std::copy_if指定输入和输出范围不能重叠。还有其他选择吗? 最佳答案 copy_if主要用于将范围复制到另一个范围/容器,即按照设计,该算法的本质是将满足某些条件的元素复制到另一个(非重叠)范围或新容

c++ - 为什么 std::sort() 比 std::make_heap() 快?

我有13721057我的元素std::vector.我需要对这个vector进行排序并获取前25个元素。我想,因为你可以在O(N)中构建一个堆弹出25个元素(每个元素都是O(logN))一定比在O(NlogN)中对整个vector排序更快.但是,当我对代码计时时:clock_ttStart=clock();sort(mostFrequent.begin(),mostFrequent.end(),greater());printf("Timetaken:%.2fs\n",(double)(clock()-tStart)/CLOCKS_PER_SEC);对比clock_ttStart=cl

c++ - 什么排序方法使用 : quicksort, bucket sort, radix, ... 对于微小的数据对? (c++)

我需要优化一些排序vector>的代码a其中需要根据浮点值对对进行排序。vector的长度在0到5之间。我一直在谷歌上搜索和阅读C++中的排序方法,但找不到任何关于排序小数据集的基准。对于系统来说,尽可能快是很重要的,因为它用于实时Blob跟踪系统。亲切的问候,北河三 最佳答案 Insertionsort和Bubblesort非常适合小数据对。另一种选择是使用一对if语句对比较逻辑进行硬编码。查看Whatisthefastestpossiblewaytosortanarrayof7integers?一些想法。