在某些实现中,调整大小几乎总是首先调用reserve。 最近实现了std : vector的变体。 以下所示
STD :3360 vector :3360 reserve的精简版和注释版……………………………………………实际上,大多数STL实现都比这要复杂一些(用于调试目的)。 但是,其概念基本相同
模板
void vector :3360 reserve (sizetypesz ) {
//ifonlythenewsizeisgreaterthancurrentcapacity
if(SZm_capacity ) {
//allocate the new size
t * data=static _ cast (SF allocator 33603360 allocate (SZ );
//move all previous数据
for(sizetypeI=0; i m_size; I ) {
new(dataI ) t ) STD:3360move(m_data[I] ); //! TODO: move if only noexcept;
//callthedestructoronthemoveditem
call_destructor(m_data[I];
}
//deallocate formerly used memory
SF allocator :3360开发人员(m _ data );
//reassignthecapacitytothenewcapacity
m_capacity=sz;
m_data=data; //reassign the数据指针
//size remains the same
}
以下是STD :3360 vector :3360 resize的精简版和注释版。 调整大小后,将首先调用保留,如下所示。
模板
void vector :3360 resize (sizetypesz ) {
//resize it to fit at least fit to 'sz '
保留(SZ;
//if higher size is requested
if(SZm_size )是
//defaultconstructtheremainderofthenewuninitializedmemory
for(sizetypeI=m_size; i sz; I )
new(m_dataI ) T{}
//ifthecontainersizeistogetsmaller
else
for(sizetypeI=SZ; I
call_destructor(m_data[I]; //deletetheelementsatindexesabove ' SZ '
m_size=sz;//变更容器大小。
}