STL的学习

一、string

1.char *和string的区别

char*是指向字符数组地址的指针,系统提供了一个string.h头文件声明了很多字符串操作函数,strlen strcat strcmp strcpy…
string是一个类,这个类将操作函数封装到一起,使得字符串的操作更灵活,方式更多,管理更合理;
string这个类,我们使用不用考虑内存的分配与释放,不要担心越界崩溃,string都做了相关的处理。

2.string的定义

typedef basic_string<char,char_traits<char>,allocator<char>> string;

3.构造函数

string();
string(size_type length,char ch);
string(const char *str);
string(const char *str,size_type length);//str的前几个
string(string &str,size_type index,size_type length);//中间几个
string(const string &str);//拷贝构造

4.常用的函数

size();

二、vector

1.C++ STL 之 vector 的 capacity 和 size 属性区别

size 是当前 vector 容器真实占用的大小,也就是容器当前拥有多少个容器。
capacity 是指在发生 realloc 前能允许的最大元素数,即预分配的内存空间。
当然,这两个属性分别对应两个方法:resize() 和 reserve()。
使用 resize() 容器内的对象内存空间是真正存在的。
使用 reserve() 仅仅只是修改了 capacity 的值,容器内的对象并没有真实的内存空间(空间是"野"的)。
此时切记使用 [] 操作符访问容器内的对象,很可能出现数组越界的问题。

针对 capacity 这个属性,STL 中的其他容器,如 list map set deque,由于这些容器的内存是散列分布的,因此不会发生类似 realloc() 的调用情况,因此我们可以认为 capacity 属性针对这些容器是没有意义的,因此设计时这些容器没有该属性。
在 STL 中,拥有 capacity 属性的容器只有 vector 、deque和 string。deque的元素在内存中是连续存储的,同样拥有capacity属性,deque拥有vector的所有功能,并且可以在头部和尾部插入数据。

2.vector data(num);定义的时候用num明确指出元素的个数,这样可以后面可以随机访问这些元素。

#include <iostream>
#include <vector>
using namespace std;    //使用命名空间 std
int main()
{
	vector <int> data;    //定义矢量对象 int n;
	int temp;
	for (int i = 0;i < 5;++i)
	{
		cin >> temp;//借助辅助变量输入
		data.push_back(temp);
	}
	for (int i = 0;i < 5;++i)
	{
		cout << data[i] << endl;
	}
}
#include <iostream>
#include <vector>
using namespace std;    //使用命名空间 std
int main()
{
	vector <int> data(5);    //定义矢量对象 int n;
	for (int i = 0;i < 5;++i)
	{
		cin >> data[i];//直接访问输入
	}
	for (int i = 0;i < 5;++i)
	{
		cout << data[i] << endl;
	}
}

3.vector的定义

template <class T, class Allocator = allocator <T>>//矢量模板
class vector {
    ...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值