allocate的作用

zesr1 2017-02-06 07:18:38
#include<iostream>
#include<memory>
#include<vector>
using namespace std;

int main()
{
allocator<vector<int>> aa;
auto b = aa.allocate(10);//括号内的数字不管是多少下面输出的都是10
aa.construct(b,10,1);
cout << (*b).size() << endl;
return 0;
}


上面程序中allocate的作用是什么?
...全文
602 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-02-07
  • 打赏
  • 举报
回复
VS IDE中,在不明白的符号上点鼠标右键,选转到定义。
  • 打赏
  • 举报
回复
引用 7 楼 sinat_35261315 的回复:
allocator是只分配空间,不进行构造。而没有allocator的时候会在分配空间的时候进行构造。 有些时候会用不上容器中的一些数据,比如Vector<MyClass>(10),定义的时候就会对10个MyClass类进行构造,有时候可能只用上前5个MyClass,这样就会带来构造和析构的消耗。 使用allocator表明只分配10个MyClass类那么大的空间,不进行构造。当使用的时候在调用construct函数进行构造。避免了构造和析构的消耗。

 allocator<vector<int>> aa;
    auto b = aa.allocate(10); //返回的是分配内存的首地址
    aa.construct(b,10,1); //在该地址处进行构造,即对Vector<int>进行构造,传入的是10和1,表明Vector大小为10,每一个int为1.
allocator<T> allocator是个容器,allocate返回的是分配的首地址,construct是对传入的指针(T *类型)进行构造。后面的是构造函数。
  • 打赏
  • 举报
回复
allocator是只分配空间,不进行构造。而没有allocator的时候会在分配空间的时候进行构造。 有些时候会用不上容器中的一些数据,比如Vector<MyClass>(10),定义的时候就会对10个MyClass类进行构造,有时候可能只用上前5个MyClass,这样就会带来构造和析构的消耗。 使用allocator表明只分配10个MyClass类那么大的空间,不进行构造。当使用的时候在调用construct函数进行构造。避免了构造和析构的消耗。
ipqtjmqj 2017-02-07
  • 打赏
  • 举报
回复
引用 5 楼 q1394173891 的回复:
[quote=引用 4 楼 ipqtjmqj 的回复:] .capacity()输出的就是allocate分配的大小
按照你的说法我改了下
#include<iostream>
#include<memory>
#include<vector>
using namespace std;

int main()
{
	allocator<vector<int>> aa;
	auto b = aa.allocate(123);
	aa.construct(b, 10, 1);
	cout << (*b).capacity() << endl;//输出10
	for (auto g : *b)
		cout << g << endl;
	return 0;
}
输出的不应该是123吗?结果还是10[/quote] 那是我错了,allocate相当于c语言中的malloc只管分配内存,其他不影响
zesr1 2017-02-07
  • 打赏
  • 举报
回复
引用 4 楼 ipqtjmqj 的回复:
.capacity()输出的就是allocate分配的大小
按照你的说法我改了下
#include<iostream>
#include<memory>
#include<vector>
using namespace std;

int main()
{
	allocator<vector<int>> aa;
	auto b = aa.allocate(123);
	aa.construct(b, 10, 1);
	cout << (*b).capacity() << endl;//输出10
	for (auto g : *b)
		cout << g << endl;
	return 0;
}
输出的不应该是123吗?结果还是10
ipqtjmqj 2017-02-07
  • 打赏
  • 举报
回复
.capacity()输出的就是allocate分配的大小
yshuise 2017-02-06
  • 打赏
  • 举报
回复
allocate是用于分配内存的。

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧