std::string的resize()與reserve()的區別

std::string的resize()與reserve()的區別:

resize():改變的是size()與capacity()的大小

(1)、比原來的變小之後,後面的會被截斷

(2)、比原來的變大之後,後面的會被填充新的東西,不同的編譯器可能會不同

reserve():改變的只是capacity()的大小

程序如下:

#include <math.h>
#include <stdio.h>
#include <string>
#include<iostream>

using namespace std;

int main()
{
    std::string s1("hello");
    std::cout << "s1=" << s1 << " s1.size=" << s1.size() << " s1.capacity=" << s1.capacity() << endl;

    std::cout << "after resize to 2" << endl;
    s1.resize(2); //尺寸由5改變爲2,多餘字符被截掉了,只剩下he
    std::cout << "s1=" << s1 << " s1.size=" << s1.size() << " s1.capacity=" << s1.capacity() << endl;

    std::cout << "after resize to 100" << endl;
    s1.resize(100);//尺寸由2改變爲100,後面的數據被填充了98個a
    std::cout << "s1=" << s1 << " s1.size=" << s1.size() << " s1.capacity=" << s1.capacity() << endl;

    std::cout << "\n";
    std::cout << "===================================================================" << endl;
    std::cout << "\n";

    std::string s2("hello");
    std::cout << "s2=" << s2 << " s2.size=" << s2.size() << " s2.capacity=" << s2.capacity() << endl;

    std::cout << "after reserve to 20" << endl;
    s2.reserve(20);  //只改變capacity()的大小,其他的不變
    std::cout << "s2=" << s2 << " s2.size=" << s2.size() << " s2.capacity=" << s2.capacity() << endl;

    std::cout << "after reserve to 2" << endl;
    s2.reserve(2);   //只改變capacity()的大小,其他的不變
    std::cout << "s2=" << s2 << " s2.size=" << s2.size() << " s2.capacity=" << s2.capacity() << endl;

    return 0;
}

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章