小编Ant*_*eru的帖子

用于在稀疏域中设置位的快速容器,并迭代(C++)?

我需要一个只有两个操作的快速容器.从非常稀疏的域插入键(所有32位整数,在给定时间设置大约100),并迭代插入的键.它应该处理很多插入相同条目插入(例如,500k,但只有100个不同的插入).

目前,我正在使用std :: set(仅插入和迭代接口),这很不错,但仍然不够快.std :: unordered_set的速度是Google Hash Maps的两倍.我想知道为这种情况优化了什么数据结构?

c++ containers

5
推荐指数
1
解决办法
595
查看次数

C++中的便携式wchar_t

在C++中是否有可移植的wchar_t?在Windows上,它的2个字节.其他一切都是4个字节.我想在我的应用程序中使用wstring,但如果我决定将其移植到端口,这将导致问题.

c++ windows portability wchar-t wstring

5
推荐指数
1
解决办法
4348
查看次数

比较两个字符串的最佳或最快方法是什么?

我不确定下面的代码有多快.如果有人知道比这更快/更优化的代码,请告诉我.

int xstrcmp(char *s1, char *s2)
{
  while (*s1 == *s2++)
            if (*s1++ == 0)
                    return (0);
  return (*(const unsigned char *)s1 - *(const unsigned char *)(s2-1));
}
Run Code Online (Sandbox Code Playgroud)

c++ string performance

5
推荐指数
3
解决办法
1万
查看次数

Mac OS X 上的 /proc/self/cmdline / GetCommandLine 等价物是什么?

如何在不使用 argc、argv 的情况下访问 Mac OS X 上的命令行?在 Linux 上,我只会在 Windows 上阅读/proc/self/cmdline或使用GetCommandLine,但我找不到 Mac OS X 的等价物。

linux windows macos porting

5
推荐指数
1
解决办法
1625
查看次数

从enable_if中的依赖类中获取true_type/false_type typedef的布尔值

我有课

template <typename T>
struct Trait { typedef std::false_type IsGood; };

template <>
struct Trait<int> { typedef std::true_type IsGood; };
Run Code Online (Sandbox Code Playgroud)

像这样的调用无法在 MSVC 2010 上编译

template <typename T, typename Enable = void> class Foo;

template <typename T>
class Foo <T, std::enable_if<typename Trait<T>::IsGood::value>::type>
{};

// This fails as well
template <typename T>
class Foo <T, typename std::enable_if<Trait<T>::IsGood::value>::type>
{};

// And this fails horribly
template <typename T>
class Foo <T, typename std::enable_if<typename Trait<T>::IsGood::value>::type>
{};
Run Code Online (Sandbox Code Playgroud)

尽管

template <typename T>
class Foo <T, typename std::enable_if<std::is_same<std::true_type, …
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming

4
推荐指数
1
解决办法
3212
查看次数

如何在Git/HG/Bzr中找到当前版本的最新标签?

目前在我的实践中我使用VERSION文件来存储:

major=2
minor=0
fix=1

这意味着产品版本v2.0.1或更新版本的来源.

在每次发布之前,我必须提交对此文件的更新,因此标记为tag2.0.1release-2.0.1的标记覆盖了上面的内容(而不是以前的版本!).

我认为可以通过从构建脚本自动生成VERSION文件来避免此作业.

看看转历史:

  +--+-----+----------------------+-YY--+----+------+------+-HH-->
  dev|     |            ^     ^   |     |    |      |      |
     |     |            |     |   |     |    v      v      v
     |     |            |     |   |     |    +--+------+-ZZ---+-->
     |     |            |     |   |     |    b2 |      |      |
     |     |            |     |   |     |       v      v      v
     |     |            |     |   |     |      t2.0.0 t2.0.1 t2.1.0
     v     v            |     |   v     v
    t0.1.0 +---+--XX--+-+---+-+-----+------+------+------+------+--->
           b1  |      |     |       |      | …

git version-control mercurial branch bazaar

3
推荐指数
1
解决办法
895
查看次数

使用RAWINPUT区分左右移位键

RAWINPUT提供两个标志(RI_KEY_E0RI_KEY_E1)来检查是否按下了左键或右键.这适用于CTRL,但不适用于左右移位.实际上,两者的标志相同,而VKey也是相同的(VK_SHIFT).如何找出按下哪个班次?我正在使用Windows 7.有趣的是,无论我按哪个shift键,flags/vkey值都完全相同.

windows winapi input raw-input

2
推荐指数
1
解决办法
2365
查看次数

使用模板中的 Django 模型方法

我有一个这样的模型:

class Car(models.Model):
    parentType = models.ForeignKey("self", null=True,blank=True)
    engine = models.TextField (null=True)
Run Code Online (Sandbox Code Playgroud)

汽车可以有发动机,也可以是具有相同发动机的另一辆汽车的变体。现在我有一个像这样的访问器:

def GetEngine(self):
    if self.parentType:
        return self.parentType.GetEngine()
    return self.engine
Run Code Online (Sandbox Code Playgroud)

但这对于模板来说很快就会变得丑陋,因为我需要一个属性来访问(无法调用该函数),然后我最终会得到与字段命名几乎相同的属性。有没有办法直接在 Django 中表达上述行为?

python django

2
推荐指数
1
解决办法
4139
查看次数

界面良好做法

拥有一个没有方法但只有属性的接口是一个好习惯吗?

.net

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

类似于 memcached 的简单 C/C++ 进程内缓存

我需要一个应该在进程内运行的简单(LRU)缓存。我找到了 memcached,它看起来不错,但似乎没有一种简单的方法可以在进程中托管它。我不需要分布式缓存,只需要一个简单的键/值存储和某种 LRU 行为和一些不错的分配器来限制碎片,因为条目大小变化很大(几个字节 - 几千字节。)肯定有这种事情的现有实现?应该是 C 或 C++。

c caching

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

如何使用Visual Studio 14 2015 x64构建OpenEXR 2.2?

我正在使用CMake 3.7.1。我想使用Visual Studio 2015 x64 构建OpenEXR 2.2。发行版本包含详细的构建说明:

  1. 启动命令窗口,使用CMakeLists.txt导航到IlmBase文件夹,然后键入命令:setlocal del / f CMakeCache.txt cmake -DCMAKE_INSTALL_PREFIX = -G“ Visual Studio 10 Win64” .. \ ilmbase

  2. 导航到Windows资源管理器中的IlmBase文件夹,打开ILMBase.sln并生成解决方案。成功构建后,右键单击安装项目并进行构建。它将输出安装到上一步中设置的路径。

  3. 转到http://www.zlib.net并下载zlib

  4. 启动命令窗口,使用CMakeLists.txt导航到OpenEXR文件夹,然后键入命令:setlocal del / f CMakeCache.txt cmake -DZLIB_ROOT = -DILMBASE_PACKAGE_PREFIX = -DCMAKE_INSTALL_PREFIX = -G“ Visual Studio 10 Win64” ^ .. \ openexr

  5. 在Windows资源管理器中导航到OpenEXR文件夹,打开OpenEXR.sln并构建解决方案。成功构建后,右键单击安装项目并进行构建。它将输出安装到上一步中设置的路径。

步骤1到2对我来说没有问题。IlmBase的lib,dll和头文件存储在“ build”文件夹中:

在此处输入图片说明

我对步骤1到2的执行说明:

wget.exe https://github.com/openexr/openexr/archive/v2.2.0.zip -OC:\thirdparty\vs2015\x64\openexr-2.2.0.zip
7za.exe x C:\thirdparty\vs2015\x64\openexr-2.2.0.zip -oC:\thirdparty\vs2015\x64
del C:\thirdparty\vs2015\x64\openexr-2.2.0.zip
C:
cd C:\thirdparty\vs2015\x64\openexr-2.2.0\IlmBase
cmake -G"Visual Studio 14 2015 Win64" -HC:\thirdparty\vs2015\x64\openexr-2.2.0 -BC:\build\vs2015\x64\openexr-2.2.0 ^
setlocal
del /f CMakeCache.txt
cmake -DCMAKE_INSTALL_PREFIX="..\ilmbase\build" …
Run Code Online (Sandbox Code Playgroud)

64-bit build cmake openexr visual-studio-2015

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