c++ - 调整 STL vector 的大小是否会删除/使其以前的内容无效?

标签 c++ stl vector

(示例程序)似乎没有,但我可以确定吗?

// 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) ;
}

最佳答案

调整 STL vector 的大小可能需要重新分配底层存储。这可能会导致任意数量的元素被销毁和重新创建,并且所有迭代器都失效。访问失效的迭代器是使用 STL 时常见的错误来源。 p>

每个元素的内容将是相同的,除非复制构造函数不起作用。

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;
}

关于c++ - 调整 STL vector 的大小是否会删除/使其以前的内容无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591840/

相关文章:

Java:填充两个 vector 并对它们进行排序

c++ - 这个模板语法和无符号类型是什么?

类似于c++ map的java库

c++ - 为什么他们有系统字符串和标准字符串

c++ - 访问嵌套的容器成员

c++ - STL std::map,通过ref传递给const以及const_casting的必要性

c++ - 如何将文本文件读入类的 vector

c++ - 无法将QWidget扩展的实例添加到QVector

c++ - 将部分专用模板作为模板参数传递

c++ - 在 C++ 中使用指针将二维数组传递给函数