最近看了一个老外叫板std::sort,号称他修改过的Qsort比std::sort快100倍。我的第一反应是不可能,细细看下去,他写的例子确实是这样。因为在vector<SomeClass>这样的容器中排序处理对象时,会大量的构造和析构,甚至还有分配内存。读到这里,我想了解C++的读者立马可以反映出问题所在,心里不是在想“菜鸟”,就是在想...
qsort不是和vector配套使用的,所以不能用vector的iterator。qsort适合用来排序原生的数组。用qsort(&rooms[0],……)可以,是因为vector的内部实现是一个整块的内存,&rooms[0]相当于取出了这块内存的首地址。用sort(rooms.begin(), ...)才是STL的做法 ...
他声称 std::sort 比std::qsort 快大约 670%,这是由于内联的事实。我测试了自己,我发现 qsort 更快 :( !有人可以帮我解释这种奇怪的行为吗? #include <iostream> #include <vector> #include <algorithm> #include <cstdlib> #include <ctime> #include <cstdio> const size_t LARGE_SIZE = 100000; ...
优化2:去掉不必要的交换mySwap(),直接改为替换 #include<iostream>#include<vector>#include<stack>#include<cstring>#include<string>#include<queue>#include<algorithm>#include"TreeNode.h"#include"ListNode.h"using namespacestd;voidmySwap(intnum[],inti,intj){inttemp = num[i]; num[i] = num[j]; ...
s1); const char* _s2 = *static_cast<const char* const*>(s2); return strcmp(_s1, _s2); }在main()中:char *str_arr[] = { "one", "two", "three" }; qsort(str_arr, sizeof(str_array)/sizeof(char*), sizeof(char*), scmp);使用vector和std :: sort更容易。
1#include <iostream>2#include <cstdio>3#include <iomanip>4#include <algorithm>5#include 6#include <set>7#include <string>8#include <vector>9#include <ctime>10#include <cstdlib>1112usingnamespacestd;131415#defineMAX 1000000016inta[MAX];1718intcmp(constvoid*a ,constvoid*b)19{20return(*(int...
而qsort就不同了,void*传递避免类型问题(“类型不安全”),交换按位交换,省去等号烦恼,而传递的比较参数稍加类型转换就能在数组上操作,只需要写好单个元素的大小和比较函数就比c++不知好上太多(虽然c++有vector) 就拿c风格字符串来说吧: #include<iostream> ...
std::vector<classname> arr; ... std::sort(arr.begin(), arr.end()); 或者你想使用C的 qsort ? static int compare_classname (const void* a, const void* b) { const classname* _a = reinterpret_cast<const classname*>(a); const classname* _b = reinterpret_cast<const classname*>(b);...
容器的分类 序列式容器(sequence container) array(数组) vector(向量) deque(双端队列) List(双向链表) forward list(单向链表) stack、queue底层可以调用deque实现。 关联式容器(associative container) set / Multiset map / Multimap set、map基于红黑树(RBtree)...猜...
std::vector<std::string>vec;charstr[64];for(inti=0;i<n;i++){mRandString(str,32,64);m...