注册 登录
编程论坛 C++教室

帮我看看这个例子,怎么错了

吉姆汤 发布于 2021-08-16 11:21, 2859 次点击
#include <iostream>
using namespace std;
#include<string>

int main()
{
    string str;
    char s[] = "12345";

    str.reserve(5);

    for (int i = 0; i < 5; i++)
        str[i] = s[i];

    cout << "str:" << str << endl;
    cout << "length():" << str.length() << endl;
    system("pause");
    return 0 ;
}
 

[此贴子已经被作者于2021-8-16 11:23编辑过]

4 回复
#2
rjsp2021-08-16 11:25
怎么错了
你先要说清楚是什么错,编译错误,还是运行错误?

str.reserve(5); 改为 str.resize( 5 ); 吧
#3
吉姆汤2021-08-16 11:35
回复 2楼 rjsp
运行结果length,为啥是0,不是用了reserve函数吗?用的错吗
#4
吉姆汤2021-08-16 11:45
自问自答

resize(),设置大小(size);
reserve(),设置容量(capacity);
size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。
打个比方:正在建造的一辆公交车,车里面可以设置40个座椅(reserve(40);),这是它的容量,但并不是说它里面就有了40个座椅,只能说明这部车内部空间大小可以放得下40张座椅而已。而车里面安装了40个座椅(resize(40);),这个时候车里面才真正有了40个座椅,这些座椅就可以使用了
#5
吉姆汤2021-08-16 11:54
回复 2楼 rjsp
谢谢,版主,再次十分的感谢
1