程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> string-關於c++的vector空間分配的問題

string-關於c++的vector空間分配的問題

編輯:編程綜合問答
關於c++的vector空間分配的問題

假如vector中存放100個string(不是指針類型string*,而是string),那麼如果vector中的一個元素重新分配空間,會不會造成整個vector重新分配空間呢?假如代碼如下:
vector *v1 = new vector(100);
v1[20].append("abc");
假設最後一句使v1[20]字符串超出原分配空間,根據string類型的算法,這個字符串會重新分配空間並復制數據,因為它屬於v1的,而v1中的元素必須是連續的,所以是不是它也將會造成整個v1重新分配空間並復制數據呢?

最佳回答:


 // 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的內存,地址沒有任何變化,可見根本和這個不相干。

zhuwt2008
caozhy
caozhy
zhuwt2008
zhuwt2008
zhuwt2008
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved