这个主题出现在这个主题中,关于对Visual Studio 2015的std :: list :: sort()的更改:
`std :: list <> :: sort()` - 为什么突然切换到自上而下策略?
新版本的std :: list :: sort不需要默认的可构造std :: list,因为它只使用迭代器,并且不创建任何本地列表,因此列表不能是默认值无关紧要建造.先前版本使用本地列表(注意 - 列表的每个实例都涉及动态分配标记节点):
typedef list<_Ty, _Alloc> _Myt;
// ...
const size_t _MAXBINS = 25;
_Myt _Templist, _Binlist[_MAXBINS];
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个非默认的可构造列表,使用Visual Studio 2015版本来测试对std :: list :: sort()的更改如何处理.
首先,我尝试了Microsoft C++ 11最小分配器示例.udpate - 为了Jonathan Wakely的回答,我不得不换一行来证明这个问题:
template <class T>
struct Mallocator
{
typedef T value_type;
// Mallocator() noexcept {} // replaced this line from the Microsoft example
Mallocator(T) noexcept {} // no default constructor …
Run Code Online (Sandbox Code Playgroud) 最近在学习CRC32算法。算法有很多种,我最感兴趣的是intel在2009年发表的论文:Fast CRC ComputationUsingPCLMULQDQInstruction。我已经检查了内核中的实现。
我做了一些数学,我可以完全理解在没有位反射的情况下常数是如何计算的。但我仍然感到困惑:
算法中的位反射常数是如何计算的?(本文中的位反射部分)。
在内核的实现中,我认为当我们从128位折叠到96位(第207行)时,我们应该使用k5'(0x163cd6124)来计算结果,但它似乎使用k4'(0x0ccaa009e)
我困惑了很久,也找不到自己错在哪里。:(
如何创建接收int参数n的ac代码并返回此数学方程的值
f(n)= 3*f(n -1)+ 4,其中 f(0)= 1
每次程序接收到n时,程序应该从0到n开始,这意味着代码(for循环).
这里的问题是我无法将其翻译成代码,我被困在f(n-1)部分,我怎么能在c中使这个工作?
注意.这个代码应该只在基本的C中构建(不再是循环,没有函数,在void main等).
我想问一下我创建的排序通用类。我使用了今年学到的许多不同概念,并将其组合到一个不错的类中,可以用来对任何东西进行排序(当然,如果它是一个类,则该类具有CompareTo方法)
public class Sort<T> where T : IComparable<T>
{
private List<T> toSort;
public Sort(List<T> sortList)
{
toSort = sortList;
quickSort();
}
public void quickSort()
{
qSort(toSort, 0, toSort.Count - 1);
}
private void qSort(List<T> toSort, int left, int right)
{
//set the indexes
int leftIndex = left;
int rightIndex = right;
//get the pivot
var pivot = toSort[left + (right - left) / 2];
while (leftIndex <= rightIndex)
{
//check left values
while (toSort[leftIndex].CompareTo(pivot)<0)
{
leftIndex++;
}
//check right values …
Run Code Online (Sandbox Code Playgroud) 我从这个答案中获取了一个Python片段(稍加修改)来计算以太网crc32帧检查序列:
msg = '00'
data = bytes.fromhex(msg)
print(data)
print(msg)
crc = zlib.crc32(data)&0xFFFFFFFF
for i in range(4):
b = (crc >> (8*i)) & 0xFF
print('{:02X}'.format(b))
Run Code Online (Sandbox Code Playgroud)
00
对于它输出的消息,这是此答案8D EF 02 D2
的位反转解决方案。到目前为止,一切都很好。
现在这里说,
对包括 CRC 码的接收帧数据运行 CRC 算法将始终导致无错误接收数据的零值,因为 CRC 是数据除以多项式的余数。然而,这种技术可能无法检测错误,其中带有尾随零的数据也将导致相同的零余数。为了避免这种情况,发送方在将 FCS 附加到有效负载数据的末尾之前对其进行补充(每个位都取反)。这样,当数据正确接收时,算法结果将始终是 0xC704DD7B 的 CRC32 残差。
但如果我输入00 8D EF 02 D2
计算器,结果是1C DF 44 21
,而不是所说的余数。我还尝试了其他组合,因为通常必须反转字节中的位或其他什么(我实际上对所有这些反转的东西感到困惑,但我希望,尝试几种可能性后的良好结果将引导我走向正确的反转),但没有任何成功:
00 D8 FE 20 2D -> 66 40 C3 4A
00 D2 02 EF 8D -> DF 42 14 …
Run Code Online (Sandbox Code Playgroud)