小编tgm*_*ath的帖子

哪种数据结构在C中广泛使用?

几天前,我问自己在C函数中应该使用哪种数据结构.我通常用C++编写,选择将落到std :: vector.

有一些可能的选择:

  • 一个静态(足够大)的数组
  • 一个动态数组,在需要时增长(例如,它的大小加倍)
  • 一个自己的列表实现为结构的指针下一个

最后一个选项似乎不寻常.有没有更大的项目,有人使用自己的结构,如列表?数组或自己的数据结构之间的决策是否有一般规则?

当我需要一个树形结构时,我不会想到只写一棵树.有没有广泛使用的具有这种结构的库(比如boost for C++)?或者这被认为是不好的风格,因为你必须存储一个void*而不是实际的类型?

非常感谢您的体验!

c dynamic data-structures

5
推荐指数
2
解决办法
344
查看次数

用自己的函数转换mpl矢量

我希望将每个元素乘以mpl::vector一个int.首先,一元函数乘以一个int_int.

template <int i>
struct multiply_scalar
{
    template<typename T> struct apply
    {
        typedef int_<(T::value * i)> type;
    };
};
Run Code Online (Sandbox Code Playgroud)

这是我想要的电话.

typedef vector<int_<3>, int_<4> > my_vec;
typedef typename transform< my_vec,  multiply_scalar<2> >::type my_vec_2;

typedef vector<int_<6>, int_<8> > my_vec_3;

BOOST_MPL_ASSERT(( boost::is_same< my_vec_2, my_vec_3 > )); //Fails
//type of my_vec2 is: boost::mpl::v_item<mpl_::int_<8>, boost::mpl::v_item<mpl_::int_<6>, boost::mpl::vector0<mpl_::na>, 0>, 0>
Run Code Online (Sandbox Code Playgroud)

为什么结果向量不是简单的vector<int_<6>, int_<8>>?我拿错了吗?可能是元函数或变换没有以正确的方式应用.

c++ metaprogramming boost-mpl

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

没有关于gcc但带有Clang的模板函数中未使用参数的警告

我最近测试了用clang而不是gcc构建代码。它失败,因为由于模板函数中未使用的参数,我使用-Werror。使用gcc不会发生这种情况。

这是一个小例子:

template <typename REAL> int f(int a){return 42;}

int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)

用clang编译得到我想要的结果:

$clang -c UnusedParam.cpp  -Wunused-parameter
>UnusedParam.cpp:1:36: warning: unused parameter 'a' [-Wunused-parameter]
> template <typename REAL> int f(int a){return 42;}
>                                   ^
>UnusedParam.cpp:3:11: warning: unused parameter 'a' [-Wunused-parameter]
> int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)

Gcc只会报告第二个函数中未使用的参数。

$gcc -c UnusedParam.cpp  -Wunused-parameter
>UnusedParam.cpp:3:5: warning: unused parameter ‘a’ [-Wunused-parameter]
> int g(int a){return 42;}
Run Code Online (Sandbox Code Playgroud)

有没有办法执行类似的行为?我也希望gcc生成未使用的参数警告。

编译器:

  • 叮当声:3.3版(分支/ release_33 183898)
  • Gcc:版本4.8.1 20130909

c++ gcc templates clang

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

标签 统计

c++ ×2

boost-mpl ×1

c ×1

clang ×1

data-structures ×1

dynamic ×1

gcc ×1

metaprogramming ×1

templates ×1