小编Mar*_*som的帖子

原始STL与最终在C++标准库中的那些部分之间的具体差异是什么?

我想知道SGI发布的STL 与ISO C++标准库之间的具体差异.提出这个问题,并没有回答这个问题.

一些差异是显而易见的,例如从未将其纳入标准的类slisthash_set类.我也在寻找更微妙的差异,例如方法的返回值/参数差异,或不同的复杂性要求,或不同的迭代器无效条件.

c++ stl

12
推荐指数
2
解决办法
641
查看次数

如何消除模板代码中的"除以0"错误

我使用一对整数模板参数来指定比率,因为我不能使用double作为模板参数.转换为双精度可以防止零三进制.这在早期版本的编译器中有效,但Visual Studio 2013出现错误:

error C2124: divide or mod by zero
Run Code Online (Sandbox Code Playgroud)

这是代码的简化版本:

template<int B1, int B2>
class MyClass
{
    const double B = (B2 == 0) ? 0.0 : (double) B1 / (double) B2;
    // ...
};

MyClass<0, 0> myobj;
Run Code Online (Sandbox Code Playgroud)

我真的希望B在零时使用它的表达式进行优化,所以我需要单行定义.我知道我可以使用模板参数<0, 1>来解决它,但我想知道是否有办法说服编译器我的表达式是安全的?

c++ templates divide-by-zero visual-studio-2013

12
推荐指数
1
解决办法
1356
查看次数

如何初始化常量CLSID

类ID(GUID)通常用由破折号分隔的十六进制数字序列指定,例如{557cf406-1a04-11d3-9a73-0000f81ef32e}.这不是可用于直接初始化CLSID结构的文字.

我发现了两种初始化结构的方法,但它们都很尴尬.第一个不允许声明它const,必须在运行时完成,而第二个需要大量重新格式化十六进制常量.

CLSID clsid1;
CLSIDFromString(CComBSTR("{557cf406-1a04-11d3-9a73-0000f81ef32e}"), &clsid1);

const CLSID clsid2 = { 0x557cf406, 0x1a04, 0x11d3, { 0x9a,0x73,0x00,0x00,0xf8,0x1e,0xf3,0x2e } };
Run Code Online (Sandbox Code Playgroud)

我知道如果你有一个与UUID相关联的类型,Visual Studio可以使用__uuidof运算符自动生成一个.如果你只有十六进制字符串,有没有办法做到这一点?

c++ com uuid visual-studio

12
推荐指数
1
解决办法
4951
查看次数

GDI +是否有标准图像编码器CLSID?

GDI + Image::Save方法需要CLSID参数来指定要使用的编码器.该文档指向一些示例代码,用于获取与特定MIME类型相关联的编码器,例如image/jpeg或image/png.但是我想到复制一个半页函数只是为了支持一行调试辅助,我将中间结果保存到磁盘.

不应该有标准编码器的标准CLSID列表吗?我在哪里可以找到这样的清单?我无法通过搜索Microsoft的包含文件找到一个.

c++ winapi gdi+ clsid

11
推荐指数
2
解决办法
6610
查看次数

如何将重复元素插入向量?

我正在尝试插入现有vector元素的副本以使其加倍.以下代码在以前的版本中有效,但在Visual Studio 2010中失败.

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char* argv[])
{
   vector<int> test;
   test.push_back(1);
   test.push_back(2);
   test.insert(test.begin(), test[0]);
   cout << test[0] << " " << test[1] << " " << test[2] << endl;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

-17891602 1 2预期产出1 1 2.

我已经弄清楚它为什么会发生 - 向量被重新分配,并且引用在被复制到插入点之前变为无效.较旧的Visual Studio显然以不同的顺序执行操作,从而证明未定义行为的一个可能结果是正确工作并且证明它永远不是您应该依赖的东西.

我想出了两种不同的方法来解决这个问题.一种方法是reserve确保不进行重新分配:

   test.reserve(test.size() + 1);
   test.insert(test.begin(), test[0]);
Run Code Online (Sandbox Code Playgroud)

另一种是从引用中复制,以便不依赖于引用的剩余有效:

template<typename T>
T make_copy(const T & original)
{
    return original;
}

   test.insert(test.begin(), make_copy(test[0]));
Run Code Online (Sandbox Code Playgroud)

虽然两者都有效,但两者都不是一种天生的解决方案.有什么我想念的吗?

c++ vector visual-studio-2010

11
推荐指数
1
解决办法
2710
查看次数

如何获得浮点序列中的下一个值?

Python是否提供了一个函数来获取通过递增现有浮点值的最低有效位而得到的浮点值?

我正在寻找类似于std::nextafterC++ 11中添加的功能的东西.

python math floating-point

11
推荐指数
1
解决办法
1848
查看次数

是否有符合本福特定律的随机数分布?

Python有许多方法可以生成不同的随机数分布,请参阅模块文档random.不幸的是,没有适当的数学背景,它们并不是非常容易理解,特别是考虑到所需的参数.

我想知道这些方法中是否有任何一种能够产生符合Benford定律的分布的随机数,以及哪些参数值是合适的.即对于整数群体,那些整数应该在大约30%的时间以'1'开头,'2'在大约18%的时间开始,等等.


使用Jan Dvorak的答案我将以下代码放在一起,它似乎完美无缺.

def benfords_range_gen(stop, n):
    """ A generator that returns n random integers
    between 1 and stop-1 and whose distribution
    meets Benford's Law i.e. is logarithmic.
    """
    multiplier = math.log(stop)
    for i in range(n):
        yield int(math.exp(multiplier * random.random()))

>>> from collections import Counter
>>> Counter(str(i)[0] for i in benfords_range_gen(10000, 1000000))
Counter({'1': 300696, '2': 176142, '3': 124577, '4': 96756, '5': 79260, '6': 67413, '7': 58052, '8': 51308, '9': 45796})
Run Code Online (Sandbox Code Playgroud)

python random benfords-law

9
推荐指数
1
解决办法
2264
查看次数

未初始化的struct成员是否保证具有值?

如果使用初始化列表创建a struct,那么您忽略的成员是否会获得已知的默认值?

public struct Testing
{
    public int i;
    public double d;
    public string s;
}

Testing test = new Testing { s="hello" };
Run Code Online (Sandbox Code Playgroud)

我发现微软的链接暗示了它,但没有明确说明:默认值表(C#参考).

一个小的测试程序显示它不会生成编译器错误并产生预期的结果.我知道最好不要依靠简单的测试来保证.http://ideone.com/nqFBIZ

c# struct default-value initializer-list

9
推荐指数
2
解决办法
1992
查看次数

std :: regex构造函数抛出异常

请注意,这与关于gcc的StackOverflow上的许多问题重复,我正在使用Visual Studio 2013.

这个简单的正则表达式构造抛出std::regex_error:

bool caseInsensitive = true;
char pattern[] = "\\bword\\b";
std::regex re(pattern, std::regex_constants::ECMAScript | (caseInsensitive ? std::regex_constants::icase : 0));
Run Code Online (Sandbox Code Playgroud)

what异常对象返回的实际错误不一致.通常它是一个不匹配的parethesis或支撑.为什么?

c++ regex c++11

9
推荐指数
2
解决办法
859
查看次数

C++ 03中default-initialize和value-initialize之间的区别?

我一直认为创建一个新对象总是会调用一个对象的默认构造函数,而构造函数是显式的还是由编译器自动生成的没有区别.根据对这个不同问题的高度重视的答案,这在C++ 98和C++ 03之间以微妙的方式发生了变化,现在的工作原理如下:

struct B { ~B(); int m; }; // non-POD, compiler generated default ctor 
new B;   // default-initializes (leaves B::m uninitialized)
new B(); // value-initializes B which zero-initializes all fields since its default ctor is compiler generated as opposed to user-defined.
Run Code Online (Sandbox Code Playgroud)

谁能告诉我:

  1. 为什么标准发生了变化,即这给了什么优势,或者现在可能有什么优势;
  2. "default-initialize"和"value-initialize"这两个术语是什么意思?
  3. 该标准的相关部分是什么?

c++ standards default-value default-constructor

8
推荐指数
1
解决办法
1672
查看次数