处理stl容器的大小

Lyb*_*rta 3 c++ stl

在我学习STL之前,我正在重写一个由我编写的通用库.它一直使用C风格的数组.在很多地方都有这样的代码:

unsigned short maxbuffersize; // Maximum possible size of the buffer. Can be set by user.
unsigned short buffersize; // Current size of the buffer.
T *buffer; // The buffer itself.
Run Code Online (Sandbox Code Playgroud)

我做的第一件事是改变这样的代码:

unsigned short maxbuffersize;
unsigned short buffersize;
std::vector<T> buffer;
Run Code Online (Sandbox Code Playgroud)

然后:

typedef unsigned short BufferSize;
BufferSize maxbuffersize;
BufferSize buffersize;
std::vector<T> buffer;
Run Code Online (Sandbox Code Playgroud)

然后我觉得我做的很糟糕,应该重新考虑我的编码风格.起初,BufferSize似乎是一个类型的非常糟糕的名称,但随后出现了各种奇怪的问题.如何命名尺寸类型?我应该使用自己的类型还是继承std::vector<T>::size_type?我应该缓存容器的大小还是一直使用size()?我应该允许用户手动设置容器的最大大小,如果不允许,我该如何检查溢出?

我知道不可能有一个通用的方法,因此我想听听其他编码人员和框架供应商使用的政策.我正在开发的库是跨平台的通用目的,旨在发布到公共领域并使用数十年.谢谢.

NPE*_*NPE 12

我认为默认选择应该是摆脱两者buffersize,maxbuffersize并使用buffer.size()buffer.capacity()整个.

我建议不要缓存大小,除非你有非常具体的理由这样做,支持探查器运行的硬数据.缓存会带来额外的复杂性以及缓存与真实事物同步的可能性.

最后,在您认为有必要进行检查的地方,您可以使用buffer.at(i).如果i超出范围,这将抛出异常.