在我写自己的书之前,我会问大家。
我正在寻找一个C ++类,该类几乎完全类似于STL向量,但将数据存储到堆栈中的数组中。某种STL分配器类也可以工作,但是我试图避免任何类型的堆,甚至是静态分配的每线程堆(尽管其中之一是我的第二选择)。堆栈效率更高。
它几乎需要替换使用矢量的当前代码。
对于我要写的自己,我在想这样的事情:
char buffer[4096];
stack_vector<match_item> matches(buffer, sizeof(buffer));
或者该类可以在内部分配缓冲区空间。然后看起来像:
stack_vector<match_item, 256> matches;
我以为如果空间不足,它会抛出std :: bad_alloc,尽管那永远不会发生。
更新资料
使用Chromium的stack_container.h效果很好!
我自己没有考虑过这样做的原因是,我一直忽略了STL集合构造函数的allocator对象参数。我已经多次使用template参数来进行静态池,但是我从未见过代码或编写任何实际使用object参数的代码。我学到新东西。很酷!
代码有点混乱,由于某种原因,GCC迫使我将分配器声明为实际项,而不是将其构造为vector的分配器参数。它来自这样的事情:
typedef std::pair< const char *, const char * > comp_list_item;
typedef std::vector< comp_list_item > comp_list_type;
comp_list_type match_list;
match_list.reserve(32);
对此:
static const size_t comp_list_alloc_size = 128;
typedef std::pair< const char *, const char * > comp_list_item;
typedef StackAllocator< comp_list_item, comp_list_alloc_size > comp_list_alloc_type;
typedef std::vector< comp_list_item, comp_list_alloc_type > comp_list_type;
comp_list_alloc_type::Source match_list_buffer;
comp_list_alloc_type match_list_alloc( &match_list_buffer );
comp_list_type match_list( match_list_alloc );
match_list.reserve( comp_list_alloc_size );
每当我宣布一个新的时,我都必须重复一遍。但这就像我想要的那样工作。
我注意到stack_container.h定义了StackVector,我尝试使用它。但是它不继承自vector或定义相同的方法,因此它不是直接替代。我不想使用向量重写所有代码,所以我放弃了。
噜噜哒
C语言的存储类别
JavaScript中,null是值类型还是引用类型?存在栈中还是堆中?
关于Oracle 的存储过程一问。
变量和字符串是否和java一样是存在堆和栈中的?
相关分类