草庐IT

number_sorted

全部标签

c++ - 面向对象 : How to Choose from a Number of Implementations

我是一个体面的程序程序员,但我是面向对象的新手(我接受过优秀的Pascal和C工程师培训)。我发现特别棘手的是选择多种方法中的一种来实现同一件事。对于C++尤其如此,因为它的力量几乎可以让你做任何你喜欢的事情,甚至是可怕的事情(我想权力/责任格言在这里很合适)。我认为这可能会帮助我运行一个社区正在努力解决的特定案例,以了解人们如何做出这些选择。我正在寻找的是与我的具体案例相关的建议,以及更一般的指示(没有双关语意)。开始了:作为练习,我正在开发一个简单的模拟器,其中“几何表示”可以有两种类型:“圆”或“多边形”。然后模拟器的其他部分将需要接受这些表示,并可能以不同的方式处理它们。我想出

c++ - 使用 std::sort() 按元素 block 排序

我有一个边数组,它被定义为C风格的double组,其中每4个double定义一个边,如下所示:double*p=...;printf("edge1:%lf%lf%lf%lf\n",p[0],p[1],p[2],p[3]);printf("edge2:%lf%lf%lf%lf\n",p[4],p[5],p[6],p[7]);所以我想使用std::sort()按边长对它进行排序。如果它是structEdge{doublex1,y1,x2,y2;};Edge*p;,我可以走了。但在这种情况下,double数组的block大小不是由指针类型表示的。qsort()允许您显式指定block大小,但

c++ - 为什么 std::sort 不使用我的 operator< 实现

为什么std::sort不使用我的operator在thiscode中实现#include#include#include#includeusingnamespacestd;booloperator&t1,consttuple&t2){returnget(t1)>get(t2);//`>`sothatitgetssortedinreverse}intmain(){vector>v;for(inti=0;i(x)(x)(t1)>get(t2);//`>`sothatitgetssortedinreverse});cout(x)输出是:beforesort:0,1,2,3,4,5,6,7,

c++ - ostream : prefix a positive number with a space

在C中,空格可以包含在printf格式化标志中,这会导致正数以空格为前缀。这是对齐有符号值的有用功能。我不知道如何在C++中做同样的事情。在C中:doubled=1.2;printf("%f\n",d);printf("%+f\n",d);printf("%f\n",d);产生:1.2+1.21.2使用ostream,我可以做前两个,但我如何做第三个?intd=1.2;std::cout编辑:关于我是否只想在我的所有值前加上一个空格似乎有些困惑。我只想在positive值前加上一个空格,类似于a)像printf空格标志所做的和b)类似于showpos所做的,除了空格而不是'+'。例如:

c++ - 测试容器是否实现 .at() 成员访问/std::sort 兼容的正确方法

我正在寻找确定容器是否通过.at()实现随机元素访问的最佳/正确方法.在不同(STL)容器相对于彼此排序的场景中(比如排序容器std::vector,相对于std::vector),我这样做:std::sort(toOrder.begin(),toOrder.end(),[&orderBy](inti,intj)->bool{returnorderBy.at(i)>orderBy.at(j);});在哪里std::vectortoOrder;std::vectororderBy我可以将其包装在模板函数中,但我不确定限制或测试具有随机访问迭代器/.at()的容器的最佳方法(如果没有,则需

C++ STL - STL sort() 的第三个参数如何工作?

我想对classPerson的对象数组进行排序基于其数据成员'age'.我将对象存储在vectorv中.据我所知,至少有4种方法可以执行此操作,根据下面编写的方法,我有以下问题。如何operator()在类工作中定义?我不应该在这里重载'我在方法1中发送了一个对象作为第三个参数。但是,在方法2中,我发送了一个函数的名称。为什么会这样?四种方法中哪种最好?我觉得方法三最简单。方法一classcmp{public:booloperator()(Personconst&a,Personconst&b){returna.age方法二boolcmp(constPersona,constPerso

C++ STL::inplace_merge 和 sort 有什么区别

据我所知,inplace_merge做的事情与排序完全相同,只是它只在某些情况下有效(当容器已经在两个已排序的部分中时)。换句话说,这两者有区别吗:intfirst[]={1,3,5,7};intsecond[]={2,4,6,8};vectorv(8);vector::iteratorit;copy(first,first+4,v.begin());copy(second,second+4,v.begin()+4);inplace_merge(v.begin(),v.begin()+4,v.end()).intfirst[]={1,3,5,7};intsecond[]={2,4,6,

c++ - 数组 : Largest possible number

给定一个元素数组,找到最大可能的数字通过使用数组的元素形成。例如:109答:91023578答:785321009答:9100我知道这个问题有一个使用自定义字符串比较器的解决方案,但我不明白它是如何工作的。#include#include#include#includeusingnamespacestd;boolcompare(stringa,stringb){returnatoi((a+b).c_str())vs;strings;while(cin>>s){vs.push_back(s);}sort(vs.begin(),vs.end(),compare);for(inti=vs.s

c++ - 使用 std::sort 查找 std::vector 中的前 N ​​个项目

我需要对std::vector中的元素进行排序,但我只对排序的前N项感兴趣,而不是整个列表:例如在10个元素的列表中,只需对前3个元素进行排序。其他的不用管了……1,2,3,6,7,4,9,8,5这可以使用std::sort完成吗?编辑我只需要找到vector中的前N项。std::partial_sort_copy正是我所需要的。 最佳答案 尝试std::partial_sort而不是std::sort。:) 关于c++-使用std::sort查找std::vector中的前N​​个项目

c++ - std::sort 没有复制构造

假设我有一个对象vector,其中:拷贝构造和赋值是昂贵的两个对象的默认构造和交换是廉价的。这对于引用大数据的对象来说似乎很标准——例如vector的vector。问题:有没有一种方法可以使用std::sort或标准库中的其他排序例程对这个vector进行排序,这样就不会发生复制,但是使用交换代替?我正在寻找c++0x之前的解决方案(无移动语义)。重载std::swap似乎是第一次自然而然的尝试,它确实有点帮助,但它只摆脱了一小部分复制。注意:gcc行为示例为了对1008164493625169410149162536496481进行排序,我的gccstd::sort调用了19个复制构