C中std :: vector的基本问题
发布时间:2020-12-16 06:45:45 所属栏目:百科 来源:网络整理
导读:C教科书和线程(如 these)表示向量元素在内存中是物理上连续的. 但是当我们执行v.push_back(3.14)之类的操作时,我会假设STL正在使用new运算符来获取更多内存来存储刚刚引入向量的新元素3.14. 现在说大小为4的向量存储在标记为0x7,0x8,0x9,0xA的计算机存储器单
C教科书和线程(如
these)表示向量元素在内存中是物理上连续的.
但是当我们执行v.push_back(3.14)之类的操作时,我会假设STL正在使用new运算符来获取更多内存来存储刚刚引入向量的新元素3.14. 现在说大小为4的向量存储在标记为0x7,0x8,0x9,0xA的计算机存储器单元中.如果单元格0xB包含一些其他不相关的数据,3.14将如何进入此单元格?这是否意味着单元格0xB将被复制到其他地方,擦除以便为3.14腾出空间? 解决方法
std :: vector首先分配一个更大的缓冲区,然后将现有元素从“旧”缓冲区复制到“新”缓冲区,然后删除“旧缓冲区”,最后将新元素添加到“新”缓冲区中.
通常,std :: vector实现通过在每次分配更大缓冲区所需的容量增加时增加其内部缓冲区. 正如Chris所提到的,每次缓冲区增长时,所有现有的迭代器都会失效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |