Learning ©➕➕
4.52K subscribers
81 photos
2 videos
38 files
182 links
ک
Download Telegram
#vector #data
🔵وکتور(vector)

🔹تابع data
value_type* data( ) noexcept;


const value_type* data( ) const noexcept;


متد data یک اشاره گر به اولین عنصر وکتور به ما می دهد، دقت کنید یک اشاره گر نه یک iterator. ما با استفاده از همین اشاره گر می توانیم به بقیه ی عناصر هم دسترسی داشته باشیم. چگونه؟ با آفست عنصری, که ما می خواهیم به آن دسترسی داشته باشیم . حال آفست چیست؟ آفست به طور کلی به آدرس یک داده درحافظه نسبت به یک آدرس دیگر گویند. شما می دانید که ما هر آدرسی به کامپیوتر می دهیم نسبت به صفرمین خانه ی حافظه سنجیده می شود اما آفست می تواند نسبت به هر جایی از حافظه در نظر گرفته شود.
اگر براتون مبهم است به توضیحات زیر دقت کنید :

0.100
1.101
2.102
3.103
4.104
5.105
6.106
7.107
8.108
9.109
10.110

فرض کنید این 10 خانه ی اول حافظه است ما یک اشاره گر داریم به اسم p که به سومین سلول حافظه اشاره می کند فرض کنیم که نوع اشاره گر p از نوع char است، پس تمام آدرس هایی که با آفستی نسبت به p پیدا می شوند هم باید نوع char باشند. پس آفست سلول 6 نسبت به p می شود 3، چرا؟ چون سلول 6، 3 سلول از نوع char با سلول 3 فاصله دارد به عبارت ساده تر، برای پیدا کردن آفست یه سلول نسبت به یک سلول دیگر باید بیاییم حساب کنیم که چند سلول بین آنها فاصله است البته باید سلول ها را نسبت به نوع سلول مرجع بشماریم، مثلا اگر سلول مرجع به یک متغیر از نوع char اشاره می کند باید سلول ها را یکی یکی بشماریم، اگر سلول مرجع به یک متغیر از نوع int اشاره می کند باید سلول ها را 4 تا 4 تا بشماریم و برای بقیه ی نوع ها هم همین طور.
حالا در این مثالی که بالا زده شد اگر سلول 0 به یک متغیر از نوع int اشاره کند آفست سلول 8 نسبت به سلول 0 می شود 1. چرا؟چون بین 4 بایت اول تا 4 بایت سوم که اولین بایت است؛ بایت 8 می شود فقط یک 4 بایت وجود دارد حال متد data آدرس اولین خانه ی وکتور را به ما می دهد و ما نسبت به آن آدرس می توانیم به بقیه عناصر دسترسی داشته باشیم.

🔹مقادیر بازگشتی :
یک اشاره گر از نوع داده های ذخیره شده داخل وکتور به اولین عنصر داخل وکتور.
#include <iostream>

#include <vector>

using namespace std;


int main( )

{

vector<int> a;

for(inti=0;i<=10;i++)

a.push_back(i);

int *p=a.data( );

cout<<p<<"="<<*p<<endl;

cout<<p+1<<"="<<p[1]<<endl;

cout<<p+2<<"="<<p[2]<<endl;

cout<<p+3<<"="<<p[3]«endl;

cout<<p+4<<"="<<p[4]<<endl;

cout<<p+5<<"="<<*p+5<<endl;

return 0;

}


Output:
0x512c90=0
0x512c94=1
0x512c98=2
0x512c9c=3
0x512ca0=4
0x512ca4=5

با این برنامه می توانیم ثابت کنیم که عناصر ذخیره داخل وکتور در حافظه درست مثل آرایه پشت سر هم قرار گرفتند

🔰ترجمه شده از سایت
www.cplusplus.com

@Learncpp