View Full Version : دستور get_allocator()
hosseinam1370
چهارشنبه 13 اسفند 1393, 09:55 صبح
دوستان من هرچی فکر میکنم ، نمیفهمم این یعنی چی و چیکار میکنه، یه توضیح مختصری لطف کنید ممنون میشم.
p = hossein.get_allocator().allocate(5);
لینک :
http://www.cplusplus.com/reference/map/map/get_allocator/
با تشکر.
rahnema1
چهارشنبه 13 اسفند 1393, 17:10 عصر
سلام، یک حافظه ای را اشغال کرده کجاش مبهمه؟
hosseinam1370
چهارشنبه 13 اسفند 1393, 20:08 عصر
بازم با زحمت های ما جناب rahnema1;
مبهم اینجاست که اصلا با دستور allocate در هیج جا استفاده نکردم ، و الان اصلا نمیدونم این چیکار می کنه ، و منظورش اینجا چیه؟و کارش چیه!!!
با تشکر.
rahnema1
چهارشنبه 13 اسفند 1393, 21:06 عصر
ببینید کلاسهای موجود در STL ساختمانهای نسبتا پیچیده ای هستند که هر کدوم از ترکیب کلاسهای مختلف ایجاد شده اند که هر کدام یک وظیفه خاص را به عهده دارند. تعدادی از کلاسها از جمله vector و map شامل عضوی به نام allocator هستند که خودش یک کلاسه و وظیفه اش امور مربوط به تخصیص و آزاد کردن حافظه هست. خود map از این عضو و تابعهای موجود در اون استفاده می کنه تا امور خودش را انجام بده
حالا کلاس map یک تابع به نام get_allocator در اختیار ما قرار داده تا از طریق اون به allocator موجود در map دسترسی پیدا کنیم و بتونیم با حافظه ای که در اختیار map هست بازی کنیم و دستکاری کنیم
hosseinam1370
پنج شنبه 14 اسفند 1393, 09:34 صبح
مثلا الان در اینجا :
p = hossein.get_allocator().allocate(5);
به اندازه 5 تا از حافظه ، به p داده شده ، از جنس hossein.
خوب یعنی من باید بتونم به کلید و متغییرش دسترسی داشته باشم ، ولی من به کلیدش دسترسی ندارم ، یعنی قابل تغییر نیست ، و فقط میتونم به متغییر دسترسی داشته باشم و تغییرش بدم.
اینم کد :
#include "stdafx.h"
#include<iostream>
#include<string>
#include<map>
using namespace std;
void main()
{
map<char , int> hossein;
pair<const char , int> *p;
p = hossein.get_allocator().allocate(5);
p[0].second = 5;
system("pause");
}
همانطور که میبینید p[0].second قابل تغییر هست ولی p[0].first رو نمیتونم تغییر بدم.باید چیکار کنم که p[0].first رو هم تغییر بدم ، یا اصلا قابل تغییر نیست؟!!!
با تشکر.
rahnema1
پنج شنبه 14 اسفند 1393, 10:09 صبح
اعضای map تعدادی pair هستند که اولی ثابته و دومی ثابت نیست که خود شما هم در گذاشتید:
pair< const char , int> *p;
چیزی که const باشه را نمیشه تغییر داد. فقط میشه مقدار دهی اولیه یا initialize کرد
hosseinam1370
جمعه 15 اسفند 1393, 18:31 عصر
پس با این حال من فقط میتونم به اون int داخل p مقدار بدم ، و char داخل p رو نمیتونم مقدار بدم ، .
حالا میشه لطف کنید من چطور میتونم
pair< const char , int> *p;
p رو مقدار اولیه بدم به char ?!
با تشکر.
rahnema1
جمعه 15 اسفند 1393, 19:25 عصر
ببینید قبل از اینکه جواب بدم بگم که این allocator در map کاربرد زیادی نداره. حالا شما گیر دادین به این قسمتش:)
این هم جواب
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
map<char , int> hossein;
pair<const char , int> *p;
p = hossein.get_allocator().allocate(5);
hossein.get_allocator().construct(&p[0],make_pair( 's' , 5));
cout << p[0].first << endl;
system("pause");
}
hosseinam1370
شنبه 16 اسفند 1393, 00:04 صبح
راستش من وقتی وارد map شدم با allocator آشنا شدم و فهمیدم چیه ، و در کجاها استفاده میشه .برا همین یخورده روش گیر دادم تا از لحاظ ساختاری بفهمم این چیه و چیکار میکنه، که با کمک شما فکر کنم همشو فهمیدم.:چشمک:.
با تشکر.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.