作者:暖心我在这_若惜 | 来源:互联网 | 2023-09-14 10:56
vector容器vectoor是一个单口容器。vector动态增长的基本原理当插入新元素的时候,如果空间不足,那么vector会重新申请更大的一块内存空间,将原空间数据拷贝到新空间
memcpy( m_arrPtData.data(), arrData.data(), iLineNum * iTriggerSize * sizeof( ushort ) );
data()的函数接口如下:
_Tp*
data() _GLIBCXX_NOEXCEPT
{ return _M_data_ptr(this->_M_impl._M_start); }
const _Tp*
data() const _GLIBCXX_NOEXCEPT
{ return _M_data_ptr(this->_M_impl._M_start); }
- vector的resize()和reserve()用法及区别
出错的代码片段:
void Net_Operator::Net_UDP_GetNaviData( std::vector& arrNavi1, std::vector& arrNavi2 )
{
int iSize = m_arrNavi1_b.size();
arrNavi1.resize( iSize );
memcpy( arrNavi1.data(), m_arrNavi1_b.data(), iSize * sizeof( Nav1 ) );
iSize = m_arrNavi2_b.size();
arrNavi2.reserve( iSize );
memcpy( arrNavi2.data(), m_arrNavi2_b.data(), iSize * sizeof( Nav2 ) );
}
其中arrNavi2.reserve( iSize );
的正确写法是arrNavi2.resize( iSize );
1.vector的capacity和size的区别
size指的是容器当前拥有的元素个数,而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
vector ivec;
qDebug() <<"ivec:size "< <<" " <<"ivec:capacity " < for(vector::size_type ix = 0;ix != 24;++ix)
{
ivec.push_back(ix);
}
qDebug() <<"ivec:size "< <<" " <<"ivec:capacity " < ivec.reserve(50);
qDebug() <<"ivec:size "< <<" " <<"ivec:capacity " < return a.exec();
}
运行结果为:
ivec容器的当前状态如下图:
2.resize()和reserve()的区别
reserve是容器预留空间,但在空间内不真正创建元素对象,所以没有在添加新的对象之前,不能引用容器中的元素。
resize是改变容器的大小,且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了。