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

毕设向导 毕业设计 1

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

回复

共2条回复 我来回复
  • 源码项目助手
    这个人很懒,什么都没有留下~
    评论
     // 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的内存,地址没有任何变化,可见根本和这个不相干。

    0条评论
  • 源码客栈
    这个人很懒,什么都没有留下~
    评论

    vector在你分配空间的时候,系统会默认分配大一点空间,比如你指定分配100个string的时候,系统可能会给你分配200个string的空间(根据IDE不同,分配的大小不同),当你的字符串超出100(自己分配的空间)而未超过200的时候,不会重新分配空间,但是当超出200(系统分配空间)的时候,会导致整个重新分配空间并复制数据。

    0条评论

发表回复

登录后才能评论