在 C++11 中使用排序函数有什么问题?
What's wrong this use of sort function in C++11?
我编写了这个程序,用于接收两个向量的输入(考虑到数字可能非常大,普通int无法容纳),然后我希望对它们进行排序。
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
bool myfunct1( A first, A second );
bool myfunct2( A first, A second );
class A
{
public:
long long int foo;
};
int main (void)
{
vector<A> values1(1000);
vector<A> values2(1000);
int temp1 = 0;
int temp2 = 0;
int faltu;
while (temp1<n)
{
cin>>faltu;
values1[temp1].foo = faltu;
temp1++;
}
while (temp2<n)
{
cin>>faltu;
values2[temp2].foo = faltu;
temp2++;
}
sort(values1.begin(), values1.end(),&myfunct1); // Sorting the elements in ascending order
sort(values2.begin(), values2.end(),&myfunct2); // Sorting in descending order
for ( i = 0; i < n; i++ )
printf("%lld",values1[i].foo);
printf("n");
for ( i = 0; i < n; i++ )
printf("%lld",values2[i].foo);
printf("n");
}
bool myfunct1( A first, A second )
{
if ( first.foo < second.foo )
return true;
else
return false;
}
bool myfunct2( A first, A second )
{
if ( first.foo > second.foo )
return true;
else
return false;
}
当我看到排序后的向量输出时,它是不正确的。例如,对于输入为:2 1 3
7 8 9
(对于两个向量),它显示输出为,000
987
。为什么会发生这种情况?我认为排序函数没有正常工作。但是我在
第一个向量打印000的原因可能是因为您用1000个初始值初始化向量,这些初始值可能默认为0。我不是百分之百确定,但第二次排序之所以有效是因为最大的数字被放在前面。在第一个例子中,在1 2 3之前有997个0。我的建议是(如果你的n是3),用3初始化向量,然后做测试。
同样,我想知道为什么你要立即初始化你的向量,让它有1000个A类型的元素,但你也可以试着测试你的程序和排序函数,不初始化任何元素的向量,而是使用push_back方法来插入变量。
您的语法在其他方面是完全正确的,排序应该没有问题。
相关文章:
- 警告处理为错误这里有什么问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 违反const正确性:我应该现实地期待什么问题
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 我的逻辑反转字符串中的元音有什么问题?
- 需要以下代码的帮助,下面的代码有什么问题
- 常量公共成员有什么问题?
- 以下代码中的函数模板有什么问题?
- 这个返回元素位置的基于循环的函数有什么问题?
- creat_list2功能有什么问题?
- 格式说明符C++有什么问题
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 我的堆栈和库存清单程序的结构有什么问题?
- 此工厂功能有什么问题?
- 以下 C++ 代码有什么问题?
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- reinterpret_cast,只读访问,简单的可复制类型,会出什么问题?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了