C ++如何在复制时保留字符串容量

时间:2016-08-05 07:54:27

标签: c++ string insert resize capacity

编辑(编辑历史中的原始帖子)

我能用这个例子重现我的问题:

GCMService.sharedInstance().connectWithHandler() { error in  if(error != nil) {   print(error) } }

返回0; 之前添加断点。现在,检查myVec中的字符串并克隆。 他们的能力不一样!

3 个答案:

答案 0 :(得分:3)

复制std::string时,请求不要将容量复制为相同。

$21.3.1.2/2 basic_string constructors and assignment operators [string.cons]

Table 49 — basic_string(const basic_string&) effects
Element   Value
data()    points at the first element of an allocated copy of the array whose first element is pointed at by str.data()
size()    str.size()
capacity()    a value at least as large as size()

唯一的保证是字符串的容量至少与复制后的大小一样大。

这意味着你必须自己做这件事:

for (int i = myVec.size(); i--;) {
    myVec[i].reserve(myVec[i].size() + MAX_BUFFER);
    clone.push_back(myVec[i]);
    clone.back().reserve(myVec[i].capacity());
}

答案 1 :(得分:0)

是的,string类有一个成员函数 String resize member funtion..

答案 2 :(得分:0)

myString.resize(l)不会更改字符串的容量,除非l大于字符串的大小。只需致电myString.capacity(),亲眼看看。