zhuwt2008 2015-04-20 00:42 采纳率: 33.3%
浏览 3730
已采纳

关于c++的vector空间分配的问题

假如vector中存放100个string(不是指针类型string*,而是string),那么如果vector中的一个元素重新分配空间,会不会造成整个vector重新分配空间呢?假如代码如下:
vector *v1 = new vector(100);
v1[20].append("abc");
假设最后一句使v1[20]字符串超出原分配空间,根据string类型的算法,这个字符串会重新分配空间并复制数据,因为它属于v1的,而v1中的元素必须是连续的,所以是不是它也将会造成整个v1重新分配空间并复制数据呢?

  • 写回答

9条回答 默认 最新

  • threenewbee 2015-04-20 03:04
    关注
     // ConsoleApplication1.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <vector>
    #include <iostream>
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        vector<string> vec;
        vec.push_back("aaa");
        vec.push_back("bbb");
        vector<string>::iterator it;
        for (it = vec.begin(); it != vec.end(); it++)
            cout << (void *)&(*it) << endl;
        for (int i = 0; i < 100000; i++)
            vec[0].append("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        for (it = vec.begin(); it != vec.end(); it++)
            cout << (void *)&(*it) << endl;
        return 0;
    }
    

    0063CFF8
    0063D014
    0063CFF8
    0063D014
    Press any key to continue . . .

    第一个元素已经被追加了1千万个a,起码用了10M的内存,地址没有任何变化,可见根本和这个不相干。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
  • ¥15 算法题:数的划分,用记忆化DFS做WA求调
  • ¥15 chatglm-6b应用到django项目中,模型加载失败