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;
}
結果: