我有10个项目的清单.我想以特定的方式对它们进行排序.
例如.项目是A1,B,C1,A2,A3,F,G,C2,H,A4
规则是
所以排序后的列表应按此顺序C1 C2 A1 A2 A3 FGH A4 B.
我正在尝试使用C++ std::stable_sort()方法来实现这一目标.在我的程序中,所有项目都是结构"SItem"的实例,它有一个成员"类型"来表示其类别(A,B等).我的比较函数看起来像这样
bool CompareItems(SItem const& item1, SItem const& item2)
{
if (item1.type == A && item2.type == C)
return false;
if (item1.type == B && item2.type == A)
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解stable_sort,它要求比较函数遵循'严格弱排序'.显然我的方法不遵循,所以我不能使用stable_sort.他们的排序算法是否可用于实现此类订单?
完整的代码
#include <list>
#include <algorithm>
#include <iostream>
enum ItemType
{
A, B, C, D, E, F, G, H,
};
struct SItem
{
SItem(ItemType t, int i) {
type = …Run Code Online (Sandbox Code Playgroud) 以下两个函数test1和test2之间是否有任何区别
static int const MAXL = 3;
void test1(int t[MAXL])
{
for (int i = 0; i < MAXL; ++i)
t[i] = 10;
}
void test2(int (&t)[MAXL])
{
for (int i = 0; i < MAXL; ++i)
t[i] = 10;
}
Run Code Online (Sandbox Code Playgroud)
通过我在MSVC2008中的测试,两个函数都修改了输入数组值.它们的功能似乎都是相同的.
任何人都可以提供一个需要在函数参数中引用数组的情况吗?
我正在尝试从双精度数中提取尾数和指数部分。对于测试数据“0.15625”,预期尾数和指数分别为“5”和“-5”(5*2^-5)。
double value = 0.15625;
double mantissa = frexp(value, &exp);
Run Code Online (Sandbox Code Playgroud)
Result: mantissa = 0.625 and exp = -2。
这里返回的尾数是分数。对于我的用例(ASN.1 编码),尾数应该是整数。据我所知,通过右移尾数并调整指数,我可以将二进制分数转换为整数。例如,0.625 base 10is 0.101 base 2、 so3字节被移位以获得整数。但我发现很难找到通用算法。
所以我的问题是,如何计算将十进制小数转换为二进制整数所需移位的位数?
我有一个 MFC 应用程序。在 InitInstance() 中,我创建了一个命名互斥体,并通过调用 WaitForSingleObject() 立即获取它。在 ExitInstance() 中,互斥体被释放。
BOOL CMyApp::InitInstance()
{
m_hMutex = CreateMutex( NULL, FALSE, "MyAppMutex" );
DWORD dwRes = WaitForSingleObject( m_hMutex, INFINITE );
switch( dwRes )
{
case WAIT_ABANDONED:
break;
case WAIT_OBJECT_0:
break;
}
}
BOOL CMyApp::ExitInstance()
{
::ReleaseMutex( m_hMutex );
::CloseHandle( m_hMutex );
}
Run Code Online (Sandbox Code Playgroud)
我从互斥体文档中了解到的是,如果一个进程退出而没有释放所获取的互斥体,则当另一个进程尝试获取它时,WaitForXXXObject() 将返回 WAIT_ABANDONED。
为了测试这一点,我运行了我的应用程序并使用任务管理器杀死了它,这样 ReleaseMutex 就不会被调用。但是当我再次运行应用程序时,InitInstance() 中的 WaitForSingleObject() 返回 WAIT_OBJECT_0。这是预期的行为吗?
我正在尝试使用!=比较两个向量,但是VS2015显示了这些错误。
Error C2672 'operator __surrogate_func': no matching overloaded function found
Error C2893 Failed to specialize function template 'unknown-type std::equal_to<void>::operator ()(_Ty1 &&,_Ty2 &&) const'
Run Code Online (Sandbox Code Playgroud)
码:
#include <vector>
struct Pixel
{
int m_nX;
int m_nY;
Pixel(int x, int y)
{
m_nX = x;
m_nY = y;
}
};
int main()
{
std::vector<Pixel> vtrPixels1;
vtrPixels1.emplace_back(1, 2);
vtrPixels1.emplace_back(3, 4);
std::vector<Pixel> vtrPixels2;
vtrPixels2.emplace_back(2, 2);
vtrPixels2.emplace_back(3, 4);
if (vtrPixels1 != vtrPixels2)
vtrPixels1 = vtrPixels2;
return 0;
}
Run Code Online (Sandbox Code Playgroud)