jjzjj

sort_flags

全部标签

c++ - 关于gcc O3 optimization flag的疑惑

我有g++4.7.3编译器。我正在尝试遵循优化标志描述http://gcc.gnu.org/onlinedocs/gcc-4.7.3/gcc/Optimize-Options.html下一个问题:我有一个程序,它使用-O2和-O3标志给出不同的时间。-O2比-O3快两倍。O2时间为8毫秒,O3时间为16毫秒。所以我想了解到底是什么造成了差异。在上面的链接中,我看到:“O3优化更多。-O3开启所有由-O2指定的优化,同时开启-finline-functions、-funswitch-loops、-fpredictive-commoning、-fgcse-after-reload、-ftr

c++ - C/C++ : -msse and -msse2 Flags do not have any effect on the binaries?

我只是在玩弄gcc(g++)和编译器标志-msse和-msse2。我有一个看起来像这样的小测试程序:#includeintmain(intargc,char**argv){floata=12558.5688;floatb=6.5585;floatresult=0.0;result=a*b;std::cout当我用下面的语句编译它时:/usr/local/bin/g++-4.9-W-mssemain.cpp-otestsse和/usr/local/bin/g++-4.9-W-msse2main.cpp-otestsse2输出文件是二进制相等的。但由于SMID标志,我预计它们并不相同。所以

c++ - 使用 atomic_flag 自旋锁进行内存排序

我正在尝试熟悉c++11的新内存排序概念,并且相信我实际上已经很好地掌握了它们,直到我偶然发现了自旋锁的这个实现:#includenamespaceJayZ{namespaceTools{classSpinLock{private:std::atomic_flagspin_lock;public:inlineSpinLock(void):atomic_flag(ATOMIC_FLAG_INIT){}inlinevoidlock(void){while(spin_lock.test_and_set(std::memory_order_acquire));}inlinevoidunlock

c++ - OpenCV 2.4.2 错误 "OpenCV Error: Bad flag"

我刚开始尝试使用OpenCV,并且根据一本书编写了一个非常简单的小程序。问题是当我尝试编译它时,出现此错误。我会告诉你我所有的信息。我使用Homebrew软件为MacOSX10.7安装了openCV。#include#includeintmain(intargc,char*argv[]){cv::Matimage=cv::imread("usf.gif");cv::namedWindow("MyImage");cv::imshow("MyImage",image);cv::waitKey(5000);return1;}我喜欢这样编译:g++-otestopencvtest.cc-lop

c++ - 为什么 std::map 没有 find/lower_bound 重载,std::list 没有 sort 重载?

我知道你不应该使用std::find(some_map.begin(),some_map.end())或std::lower_bound,因为它会采用线性时间而不是some_map.lower_bound提供的对数时间。std::list也会发生类似的事情:有用于排序的std::list::sort函数,但您无法调用std::sort(some_list.begin(),some_list.end()),因为迭代器不是随机访问的。但是,例如,std::swap具有标准容器的重载,因此swap(some_map,other_map)的调用需要O(1),而不是在)。为什么C++标准不为ma

c++ - 为什么 std::sort 不接受函数内声明的比较类

我当时正在工作,在一个函数中编写比较器(稍后移动,当我决定最好的地方时),并注意到了这个特性。我想了一会儿,意识到我不明白为什么如果我使用内部比较器代码将无法编译,但外部比较器很好。有什么解释吗?快速测试工具:#include#include#includeclassCompareMe{public:CompareMe(intin):toCompare(in){}inttoCompare;};classComparators{public:booloperator()(CompareMe*first,CompareMe*second){returnfirst->toComparetoC

c++ - qsort() vs std::sort,比较函数哲学差异

我想知道为什么在qsort(){Cversion}和std::sort()中有两种完全不同的方法来指定比较函数。qsort需要这样的比较函数:不知道为什么需要三种返回值-1、0、+1。intcomp(int*x,int*y){return*x-*y;}而std::sort()的比较函数对我来说看起来更一致,因为它是根据函数编写的,遵循不变量。即如果x小于y函数返回true,则x相对于y处于正确位置boolcomp(intx,inty){returnx当返回一个bool(或具有两个值0和1的int)更简单和干净时,为什么我们需要三个值-1,0,+1? 最佳答案

c++ - 在对对象的 vector 进行排序时使用 stable_sort

我有classPassanger有变量stringname;stringstation;stringticket;然后我有另一个类,在这个类中我有vectormyQueue;现在我想使用stable_sort排序myQueue.有没有可能,怎么说给stable_sort,应该是什么key,根据它排序myQueue?std::stable_sort(myQueue.begin(),myQueue.end(),maybeSomethingElse());? 最佳答案 std::stable_sort()过载接受自定义比较器作为其第三个参

c++ - std:sort 与插入 std::set

我正在从cin读取一些线段。每条线段由起点和终点表示。2D。X和Y。输入未排序。它是随机排列的。(更新:但我需要它们先按X再按Y排序)我可以读取所有段,将它们存储在一个vector中,然后调用std::sort。另一方面,我可以创建一个空的std::set并在每个段到达时插入它。该集合将自动维护排序顺序。这两种方法哪种更有效?更新:输入的总大小(段数)是预先知道的。 最佳答案 您应该测量这两种方法的性能以确保确定,但可以安全地假设std::vector上的std::sort是way比插入std::set更快,因为局部效应和隐藏在树插

c++ - 为什么 std::sort 会在此代码上抛出段错误?

有人可以解释为什么下面的排序会导致段错误吗?这是g++(指针的排序vector)的已知错误吗?我正在使用g++4.5.2进行编译。#include#include#includeusingnamespacestd;typedefvectorA;boolface_cmp(constA*x,constA*y){returnx!=y;}intmain(intargc,char*argv[]){vectorvec;for(inti=0;i(i%100,i*i));}vector::iteratorit;sort(vec.begin(),vec.end(),face_cmp);returnEXI