相关疑难解决方法(0)

寻找类似C++ STL的矢量类,但使用堆栈存储

在我写自己之前,我会问你们所有人.

我正在寻找一个几乎完全像STL向量的C++类,但是将数据存储到堆栈中的数组中.某种类型的STL分配器类也可以工作,但我试图避免任何类型的堆,甚至是静态分配的每线程堆(尽管其中一个是我的第二选择).堆栈效率更高.

它需要几乎替代使用向量的当前代码.

对于我自己要写的东西,我在考虑这样的事情:

char buffer[4096];
stack_vector<match_item> matches(buffer, sizeof(buffer));
Run Code Online (Sandbox Code Playgroud)

或者类可以在内部分配缓冲区空间.然后它看起来像:

stack_vector<match_item, 256> matches;
Run Code Online (Sandbox Code Playgroud)

我认为如果空间不足,它会抛出std :: bad_alloc,尽管这不应该发生.

更新

使用Chromium的stack_container.h效果很好!

我之所以没想过这样做的原因是我总是忽略了STL集合构造函数的allocator对象参数.我已经使用了几次模板参数来做静态池,但是我从未见过代码或编写任何实际使用过对象参数的代码.我学到了新东西.很酷!

代码有点乱,由于某种原因,GCC强迫我将分配器声明为实际项而不是将其构造为vector的allocator参数.它来自这样的事情:

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);
Run Code Online (Sandbox Code Playgroud)

对此:

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 ); …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector data-structures

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

是否有使用alloca的分配器,否则符合C++ STL?

我有两个问题:

1)是否可以实现使用alloca在堆栈上分配内存的分配器,否则符合C++ STL?

如果那里有代码,只需将我指向URL即可让我高兴.:-)如果那里没有代码,也许你可以草拟函数allocate和deallocate?

2)如果对上述问题的回答为"是",我想了解如何为类成员在堆栈上分配内存.举个例子,考虑一下

std::vector<int, AllocaAllocator<int> > 
Run Code Online (Sandbox Code Playgroud)

并且假设对该向量的成员函数'resize'的调用首先调用'deallocate'然后'分配'分配器.

调用allocate的范围是成员函数resize的范围.这是不是意味着在该函数调用结束时从堆栈中删除了已分配的内存?

亲切的问候,Bjoern

c++ stack stl alloca allocator

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

标签 统计

c++ ×2

stl ×2

alloca ×1

allocator ×1

data-structures ×1

stack ×1

vector ×1