fik*_*tor 30 c++ debugging c++11
我尝试使用lambda函数sort,但是出现了"Segmentation fault"错误.我设法将代码简化为以下内容:
#include <iostream>
#include <algorithm>
int main()
{
const int len = 18;
int intArr[len];
for (int i=0;i<len;i++) intArr[i]=1000+i;
// The following is expected to sort all but the last element of the array
std::sort(intArr, intArr + len -1, [](int a, int b)
{
std::cout<<"("<<a<<", "<<b<<")\n";
return (a<b?-1:(a>b?1:0));
});
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用在Ubuntu 11.04(x64)中编译并运行此代码
g++ -std=gnu++0x test2.cpp && ./a.out.
它会打印很多对形式(large_integer,1008),一对(0,1008)和退出"Segmentation fault".
ybu*_*ill 34
比较谓词应该返回一个bool:如果a <b则返回true,否则返回false.将return语句更改为:
return a < b;
Run Code Online (Sandbox Code Playgroud)
不要将它与C风格的3向比较功能混淆.
Ker*_* SB 16
谓词应该实现一个简单的弱排序.如果你想对整个事物进行排序,你的范围也会关闭.(我错过了那是故意的.)总而言之,我们正在寻找这样的事情:
std::sort(intArr, intArr + nelems, [](int a, int b){ return a < b; });
Run Code Online (Sandbox Code Playgroud)
甚至:
std::sort(intArr, intArr + nelems);
Run Code Online (Sandbox Code Playgroud)
排序的默认谓词是std::less<T>,它完全与lambda一样.
谓词for std::sort不采用类Java -1,0,1,而是希望你返回一个布尔值来回答问题'第一个参数是否小于第二个参数?',用于弱化元素排序.由于-1是非零值,因此排序算法认为它是真的,它会导致算法出现故障.
| 归档时间: |
|
| 查看次数: |
21416 次 |
| 最近记录: |