它似乎不是(示例程序),但我能确定吗?
// does resizing an STL vector erase/invalidate it's previous contents?
#include <stdio.h>
#include <vector>
using namespace std ;
void print( vector<int>& t )
{
for( int i = 0 ; i < t.size() ; i++ )
printf( "%d ", t[i] ) ;
puts("");
}
int main()
{
vector<int> t ;
t.resize( 12,9999 ) ;
print(t) ;
t.resize( 15, 10000 ) ;
print(t) ;
}
Run Code Online (Sandbox Code Playgroud)
Die*_*Epp 18
调整STL向量的大小可能需要重新分配底层存储.这可能导致销毁和重新创建任意数量的元素,并且所有迭代器都将失效. 使用STL时,访问无效的迭代器是常见的错误来源.
除非复制构造函数不起作用,否则每个元素的内容都是相同的.
int main(int argc, char *argv[])
{
int data[] = { 1, 2, 3 };
std::vector vec(data, data + 3);
// vector contains 1, 2, 3
std::vector::iterator i = vec.begin();
cout << *i << endl; // prints 1
int &ref = *i;
cout << ref << endl; // prints 1
vec.resize(6, 99);
// vector now contains 1, 2, 3, 99, 99, 99
// WRONG! may crash, may do the wrong thing, might work...
// cout << *i << endl;
// WRONG! invalid reference
// cout << ref << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
resize
std::vector
只有当新大小大于容器的当前容量(即v.capacity()
)时,才会使所有迭代器,指针和引用无效.
容器中的元素永远不会"失效".如果将容器的大小调整为小于其当前大小,则会破坏超出新大小的任何其他元素.
如果调整容器大小以使新大小大于当前容量并且需要重新分配基础存储,则会复制所有元素或将其移动到新分配的存储中.放大容器时,以前的元素始终保留,只是移动或复制到内存中的新位置.
归档时间: |
|
查看次数: |
11360 次 |
最近记录: |