C++ 词海拾贝

C++ 词海拾贝

  • 基本语法
    • 1、ostringstream
    • 2、std::
    • 3、resize() 和 reserve()

基本语法

最近在学C++,碰到问题就查一下,记录一下。

1、ostringstream

代码测试:

int main(){
	ostringstream out;
	out.put('t');//插入字符
	out.put('e');
	out << "st";
	string res = out.str();//提取字符串;
	cout << res << endl;
	system("pause");
	return 0;
}

输出:test字符串;
注:如果一开始初始化ostringstream,例如

ostringstream out("test")

那么之后put或者<<时的字符串会覆盖原来的字符,超过的部分在原始基础上增加。

2、std::

std::cout << "Count is " << count << std::endl;

在前面的学习中我们看到的输出没有 std::,而这一节出现了上面的代码。
std 是标准库函数使用的命名空间,是 standard(标准)的缩写。

using namespace std

它声明了命名空间 std,后续如果有未指定命名空间的符号,那么默认使用 std,这样就可以使用 cincoutvector 等。
假设你不使用预处理using namespace std;,就要加上 std::cin或者 std::cout
cin 用于从控制台获取用户输入,cout 用于将数据输出到控制台。
cin 是输入流对象,cout 是输出流对象,它们分别可以用 >> 和 <<,是因为分别在其类中对相应运算符进行了重载。

3、resize() 和 reserve()

resize(),设置大小(size);
reserve(),设置容量(capacity);

size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。

打个比方:正在建造的一辆公交车,车里面可以设置40个座椅(reserve(40);),这是它的容量,但并不是说它里面就有了40个座椅,只能说明这部车内部空间大小可以放得下40张座椅而已。而车里面安装了40个座椅(resize(40),这个时候车里面才真正有了40个座椅,这些座椅就可以使用了

1、resize(n)
调整容器的长度大小,使其能容纳n个元素。
如果n小于容器的当前的size,则删除多出来的元素。
否则,添加采用值初始化的元素。

2、 resize(n,t)
多一个参数t,将所有新添加的元素初始化为t。
而reserver()的用法只有一种
reserve(n)
预分配n个元素的存储空间。

了解这两个函数的区别,首先要搞清楚容器的capacity(容量)与size(长度)的区别。
size指容器当前拥有的元素个数;
而capacity则指容器在必须分配新存储空间之前可以存储的元素总数。
也可以说是预分配存储空间的大小。

resize()函数和容器的size息息相关。调用resize(n)后,容器的size即为n。
至于是否影响capacity,取决于调整后的容器的size是否大于capacity。

reserve()函数和容器的capacity息息相关。
调用reserve(n)后,若容器的capacity

如果capacity>=n呢?capacity无变化。

从两个函数的用途可以发现,容器调用resize()函数后,所有的空间都已经初始化了,所以可以直接访问。
而reserve()函数预分配出的空间没有被初始化,所以不可访问。

一个简单的测试用例:

   vector<int> a;
        a.reserve(100);
        a.resize(50);
        cout<<a.size()<<"  "<<a.capacity()<<endl;

        a.resize(150);
        cout<<a.size()<<"  "<<a.capacity()<<endl;

        a.reserve(50);
        cout<<a.size()<<"  "<<a.capacity()<<endl;

        a.resize(50);
        cout<<a.size()<<"  "<<a.capacity()<<endl;

简书链接

你可能感兴趣的:(C++ 词海拾贝)