小编Ios*_*ber的帖子

从构造函数参数的组合生成变量类型的对象

假设我有类型A,B有构造函数A(int a, double b, std::string c),B(double a, int b).

我知道如何定义一个实例化AB通过可变参数模板的函数.

有没有办法设计一个函数/宏/类型,对于一个类型T和一系列T构造函数参数的可能性向量,它为我提供了所有可能的对象?

例如,如果我使用这个神奇的构造,<A, {2, 5, 6}, {2.44, 3.14}, {"yes", "no"}>它应该提供对象:

A(2, 2.44, "yes")
A(2, 2.44, "no")
A(2, 3.14, "yes")
...
A(6, 3.14, "no")
Run Code Online (Sandbox Code Playgroud)

这同样适用于B任何其他类型,而不必重新设计魔法结构.

例如,这在Python中非常简单,但我不知道它是否可以在C++中使用.

c++ variadic-functions c++11

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

std :: deque比std :: vector更快插入到最后?

我开始比较:

  • 插入列表的前面
  • 插入向量的背面
  • 插入一个双端队列的前面

但后来我注意到即使在push_back()deque上似乎也更快.我必须做一些错误的,我不能相信一个更一般的容器也不太可能超过一个特定的一个.

我使用谷歌基准测试的代码:

#include "benchmark/benchmark.h"
#include <deque>
#include <vector>

#define NUM_INS 1000

static void BM_InsertVector(benchmark::State& state) {
    std::vector<int> v;
    v.reserve(NUM_INS);
    while (state.KeepRunning()) {
        state.PauseTiming();
        v.clear();
        state.ResumeTiming();
        for (size_t i = 0; i < NUM_INS; i++)
            v.push_back(i);
    }
}
BENCHMARK(BM_InsertVector);

static void BM_InsertDeque(benchmark::State& state) {
    std::deque<int> v;
    while (state.KeepRunning()) {
        state.PauseTiming();
        v.clear();
        state.ResumeTiming();
        for (size_t i = 0; i < NUM_INS; i++)
            v.push_back(i);
    }
}
BENCHMARK(BM_InsertDeque);

BENCHMARK_MAIN();
Run Code Online (Sandbox Code Playgroud)

结果:

Run on (1 X 2592 MHz …
Run Code Online (Sandbox Code Playgroud)

c++ stl

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

标签 统计

c++ ×2

c++11 ×1

stl ×1

variadic-functions ×1