برای استفاده از تمام امکانات سایت از جمله مرکز دانلود باید در سایت عضو شوید. برای ثبت نام تنها 1 دقیقه زمان نیاز دارید ، برای ثبت نام اینجا کلیک کنید

صفحه اول انجمنها
ثبت نامجستجوراهنماي انجمنليست اعضااتاق چت (0)گروه هاي كاربرانمرکز دانلودورود

پاسخ به يك موضوع صفحه 2 از 3
برو به صفحه قبلي  1, 2, 3  بعدي
Art Of Programming
نويسنده پيغام

پاسخ بصورت نقل قول
ارسال  
خب از این به بعد می خوایم اینجا یه کم پیشرفته تر کار کنیم.

حتما این رو دانلود کردین دیگه؟ :

http://online-judge.uva.es/problemset/Art_of_Programming_Contest_SE_for_uva.pdf

کتاب خیلی خوبی که همه اون رو برای مسابقات ACM معرفی می کنن.

این رو داشته باشین می خوایم از فصل 4 شروع کنیم به کار کردن.


_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال ESSENTIAL DATA STRUCTURES 
مزایای کلی :

1) ساختارش آسونه .
2) کد نویسی اش زمان خیلی کمتری لازم داره.
3) به صورت template تعریف شده , یعنی میشه از انواع داده ها استفاده کرد.
4) debug کردنش ساده اس
5) اجتناب از حافظه ی پویا , به 2 دلیل بهتر استفاده نشه :
           1) احتمال اشتباه کردن بیشتره     2) بررسی محتوای اون سختره
6) ...

یه توضیح: type که استفاده میشه می تونه هر نوع داده ای باشه.


از vector شروع می کنیم:

code:
#include <vector>

vector<type> v;//تعریف

vector <type>::iterator i;//شمارنده

v.begin() & v.end() // iterator اول و آخر vector رو بر می گردونن

v.push_back(type x)//داده ی x رو به انتهای لیست اضافه می کنه و size لیست یکی زیاد میشه.

v.pop_back()//داده ی آخر لیست رو بر میگردونه و size لیست یکی کم میشه.

دفعه بعد یه چیزایی اضافه از vector بهتون می گم .



اين نامه توسط ملایی در 5 شنبه Jun 07, 2007 4:48 pm ويرايش شده است.

_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال  
[/code]
code:
v.clear(); // list ro pak mikone

v.erase ( v.begin() + i );//onsor shomare i+1 om list ro pak mikone

v.erase ( iterator1 , iterator2 ); // az khoone iter1 ta yeki moonde be iter2 pak mikone

v.reserve( int  x );//be andazeye x khane faza dar hazefe migire

size_t vectorsize=v.size(); // tedade anasor ro bar migardoone

//size_t == unsigned int

v.insert( v.begin() + i , 40); // dar khooneye i+1 om 40 ro ezafe mikone

v.insert( iterator i , 4 ,40 ); // az khooneye i+1 om ta 4 khoone 40 ro ezafe mikone

v1.swap( v2 ); // v1 o v2 ro avaz mikone

bool v.empty(); // ye tabe bitmap ke chek mikone vector khali hast ya na



_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال vector دو بعدی 
تعریف وکتور 7 حالت داره که من سعی می کنم , اونایی که کاربرد بیشتری دارن رو بگم.
code:

vector < vector <type> > v; // tarif

v.assign( int a , int b); // miyad a faza az no'e type migire va too har kodoom meghdare b mizare

type temp = v.at(i).at(j) ; // onsore satre i va sotoone j ro bar migardoone

dar vaghe ba in tarif a satr va * sotoon baraye vector migirim.
ke har kodoom az sater ha khodeshoon ye vector hastan va az tavabe ghabli estefade mikonan.
masalan:

size_t si = v.at(i).size(); // miyad size satr i ro dar si mizare.

in vector do bodi kheyli karbord dare.hatman say konin bahash chand ta code benvisin.



_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

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

قسمت اول:

vector

همانطور كه گفتيم، vector مانند يك آرايه پويا عمل مي‌كند؛ خصوصيات آن نيز بسيار شبيه به آرايه است: درج در انتهاي آن بسيار سريع انجام مي‌شود (در صورتي كه به تخصيص حافظه نياز نباشد)، درج در ميانه آن با جابجايي بقيه عناصر همراه است، و براي دسترسي به هر جاي آن، فقط به يك انديس نياز داريم.

قطعه كد زير را در نظر بگيريد:
code:

      vector<long> v;

      v.push_back ( 4443 );

      v.push_back ( 24 );

      v.push_back ( 1001 );

اعمالي كه كلاس vector انجام مي‌دهد به اين صورت است:

در خط اول، سازنده vector، يك vector تهي كه جايي براي هيچ عنصري ندارد مي‌سازد.

در خط دوم، حافظه كافي براي يك عدد long (مثلاً 4 بايت) رزرو شده و عدد 4443 در آن كپي مي‌شود. نام اين حافظه را m1 مي‌گذاريم.

در خط سوم، حافظه ديگري به اندازه دو عدد long (مثلاً 8 بايت) رزرو شده (اسم آن را m2 مي‌گذاريم)، مقدار قبلي خانه اول vector يعني 4443 در 4 بايت اول آن كپي شده و m1 آزاد مي‌شود، سپس عدد 24 در 4 بايت انتهايي m2 كپي مي‌شود.

در خط چهارم، حافظه ديگري براي سه عنصر (12 بايت) رزرو شده (m3) و مقدار قبلي m2 يعني دو عدد 4443 و 24 در ابتداي آن كپي مي‌شوند. سپي m2 آزاد شده و عدد 1001 نيز در 4 بايت آخر m3 كپي مي‌شود.

در يك vector همه عناصر بايد پشت سر هم در يك حافظه خطي قرار داشته باشند. بنابراين براي درج يك عنصر جديد در انتهاي vector ، لازم است كه حافظه جديدي رزرو شود كه همه عناصر قبلي بعلاوه عنصر جديد را در خود جاي دهد. مثلاً اگر vectorي داشته باشيد كه حاوي 10000 عنصر باشد، هنگام درج يك عنصر جديد، لازم است كه يك فضاي جديد براي 10001 عنصر رزرو شده و همه 10000 عنصر قبلي بعلاوه عنصر جديد در آن كپي شوند. اين عمليات بسيار كند و غير بهينه است؛ راه حل چيست؟ كلاس vector تابعي به نام reserve دارد كه مقداري حافظه از پيش رزرو مي‌كند تا عمليات درج بهينه‌تر انجام شود. قطعه كد زير را در نظر بگيريد:
code:

      vector<long> v;

      v.reserve ( 10 );

      v.push_back ( 4443 );

      v.push_back ( 24 );

      v.push_back ( 1001 );

در خط دوم، به اندازه 10 عنصر حافظه رزرو مي‌شود؛ بنابراين، اعمال درج بعدي، هيچ هزينه‌اي در بر نداشته و بسيار سريع انجام مي‌شوند. تا درج دهمين عنصر مشكلي پيش نمي‌آيد، هنگام درج يازدهمين عنصر، حافظه جديدي به طول 11 رزرو شده و همه 10 عنصر قبلي در آن كپي مي‌شوند. تابع capacity()، مقدار حافظه رزرو شده توسط vector را برمي‌گرداند. به طور معمول، اين مقدار برابر تعداد عناصر موجود در ليست است (همان چيزي كه تابع size() برمي‌گرداند). ولي اگر از تابع reserve براي رزرو قبلي حافظه استفاده شود، اين مقدار مي‌تواند بيشتر از مقدار size() باشد. و قتي بعد از درج عناصر بعدي، مقدار size() به مقدار capacity() برسد، نياز به تخصيص مجدد حافظه و جابجايي همه محتويات ليست است.

براي استفاده بهينه از vector شما بايد حدود تعداد عناصر مورد نياز را بدانيد و با استفاده از تابع reserve() حافظه مورد نياز را قبل از درج عناصر در vector رزرو كنيد؛ در غير اين صورت، تعداد زياد رزرو حافظه جديد و كپي عناصر از محلي به محل ديگر، كارايي برنامه را به شدت كاهش خواهد داد. كلاس deque (كه بعداً آن را بررسي مي‌كنيم) در ضمن داشتن مزاياي vector، اين عيب را ندارد.

 

يك نكته ديگر در مورد vector وجود دارد و آن هم تفاوت بين تكرارگرها در vector و list است. در list تكرارگرها فقط مي‌توانند بوسيله عملگرهاي ++ و -- يك عنصر به جلو يا عقب حركت كنند. علت اين موضوع به ساختار ليست مربوط مي‌شود. در vector، به علت ساختار آرايه‌اي آن، تكرارگرها مي‌توانند بوسيله عملگرهاي + و – در يك مرحله به مقدار دلخواه به جلو يا عقب حركت كنند. مثلاً براي درج عدد 15 در محل هفتم vector (انديس 6)، مي‌توانيم از كد زير استفاده كنيم:
code:

      v.insert ( v.begin() + 6, 15 );

در ضمن مي‌توانيم از انديس گذاري نيز بر روي تكرارگرهاي vector استفاده كنيم. مثلا اگر تكرارگري داريم كه به محلي در vector اشاره مي‌كند، براي مقدار دهي عنصر دوم بعد از آن مي‌توانيم بنويسيم:
code:

      iter[2] = 15;

به اين جور تكرارگرها كه امكان دسترسي به هر جاي container را دارند، تكرارگرهاي با دسترسي تصادفي (random-access) مي‌گويند و به تكرارگرهايي كه فقط قابليت افزايش يا كاهش به اندازه يك واحد را دارند (مانند list) تكرارگرهاي دو جهته (bidirectional) مي‌گويند.

نكته ديگري كه در مورد تكرارگرها در vecotr بايد گفت اين است كه هنگام درج يك عنصر در vector يا حذف يك عنصر از آن، كليه تكرارگرهايي كه بعد از عنصر درج يا حذف شده اشاره مي‌كنند، نا معتبر شده و بايد مجدداً مقدار دهي شوند؛ البته اين در صورتي است كه تخصيص مجدد حافظه براي كل vector صورت نگيرد. در غير اين صورت، كليه تكرارگرهاي مربوط به آن شيء نامعتبر مي‌شوند.


_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال  
قسمت دوم ( و آخر درباره ی vector ):

در زير توابع موجود در كلاس vector را بررسي مي‌كنيم. اكيداً توصيه مي‌كنم كه سعي در حفظ كردن اين توابع نكنيد. بلكه از MSDN يا اين مقاله به عنوان مرجع هنگام برنامه نويسي استفاده كنيد. در پايان اين مقاله به چند نكته اشاره خواهم كرد كه در پيدا كردن مطلب مورد نظر در MSDN به شما كمك مي‌كند.
code:

vector();

vector ( size_t count );

vector ( size_t count, const type& val );

vector ( const vector& right );

سازنده كلاس vector؛ براي ساختن يك vector جديد مي‌توانيد از هر كدام از اين سازنده‌ها براي مقدار دهي اوليه آن استفاده كنيد. نوع اول يك vector تهي مي‌سازد. تا اينجا ما تنها از اين نوع استفاده كرده‌ايم. متذكر مي‌شوم كه هنگام ساختن يك شيء از هر كلاسي، حتماً سازنده آن صدا مي‌شود؛ مثلاً در اين كد:
code:

      vector<long> v;

سازنده پيش فرض كلاس vector كه همان سازنده بدون پارامتر (نوع اول كه در بالا مي‌بيبيد) است صدا مي‌شود.

نوع دوم، يك vector با اندازه اوليه count مي‌سازد. اين عناصر با مقدار پيش فرض خود مقداردهي مي‌شوند (مثلاً 0 براي اعداد و false براي bool). نوع size_t در سيستم‌هاي 32 بيتي (همان چيزي كه همه ما اكنون در حال استفاده از آن هستيم) برابر يك عدد بدون علامت 32 بيتي ( unsigned int) است و در سيستم‌هاي 64 بيتي، يك عدد بدون علامت 64 بيتي.

نوع سوم، تعداد count عنصر با مقدار اوليه val در vector ساخته شده درج مي‌كند.

نوع چهارم، يك كپي از يك vector ديگر ايجاد مي‌كند. به مثال زير توجه كنيد:
code:

      vector<char> v1 ();

      vector<char> v2 ( 9 );

      v2[3] = 'a';

      vector<char> v3 ( 5, '+' );

      vector<char> v4 ( v2 );

      v4[0] = 'b';

v1 يك vector تهي است (جفت پرانتز جلوي v1 اختياري هستند؛ در هر صورت سازنده پيش فرض صدا مي‌شود). v2 با 9 عنصر با مقدار ‘\0’ ساخته شده و سپي عنصر انديس 3 (چهارمين عنصر) با كاراكتر ‘a’ مقدار دهي مي‌شود. v3 شامل 5 كاراكتر ‘+’ است. v4 با كپي گرفتن از v2 ساخته شده و سپي عنصر اول آن با كاراكتر ‘b’ مقدار دهي مي‌شود.

 
code:

void push_back ( type& val );

همانطور كه توضيح داده شد، val را در انتهاي بردار درج مي‌كند.

 
code:

void pop_back ();

عنصر انتهايي بردار را حذف مي‌كند. معمولاً اين دستور مقدار ظرفيت (capacity) بردار را تغيير نمي‌دهد؛ مثلاً اگر vector شما حاوي 3 عنصر باشد، بعد از اجراي تابع pop_back()، مقدار size() برابر 2 خواهد شد ولي مقدار capacity() همچنان 3 باقي خواهد ماند.


 
code:

size_t size();

تعداد عناصر موجود در ليست را برمي‌گرداند.


code:

bool empty();

در صورتي كه vector تهي باشد، مقدار true برمي‌گرداند و در غير اين صورت مقدار false برمي‌گرداند. به جاي اين تابع مي‌توان از عبارت size()==0 استفاده كرد.

 
code:

void clear();

كليه محتويات vector را پاك مي‌كند. بعد از اجراي اين تابع، مقدار size() صفر خواهد بود.


code:

type& front();

يك مرجع (reference) به عنصر ابتداي vector برمي‌گرداند. اين با برگرداندن مقدار ( value) فرق مي‌كند، چرا كه مي‌توان اين تابع را در طرف راست عمگر تساوي قرار داد و مقدار عنصر را تغيير داد:
code:

      v.front() = 6;


code:

type& back();

يك مرجع به آخرين عنصر vector برمي‌گرداند.
code:

size_t capacity();

تعداد عناصري را برمي‌گرداند كه شيء vector مي‌تواند بدون تخصيص دهي حافظه جديد در خود نگه داري كند.
code:

void reserve ( size_tcount );

براي نگه‌داري حداقل count عنصر در شيء vector حافظه رزرو مي‌كند.
code:

iterator insert ( iterator where, const type& val );

void insert ( iterator where, size_t count, const type& val );

يك يا چند عنصر با مقدار val در محل where درج مي‌كند. براي توضيح بيشتر، به قسمت تكرارگرها مراجعه كنيد.
code:

iterator erase ( iterator where );

iterator erase ( iterator first, iterator last );

عنصري يا عناصري را از vector حذف مي‌كنند. در نوع اول، where عنصري را نشان مي‌دهد كه بايد حذف شود. در نوع دوم، first اولين عنصري كه بايد حذف شود را نشان مي‌دهد و last عنصر بعد از آخرين عنصري كه بايد حذف شود را مشخص مي‌كند. توجه كنيد كه خود last حذف نمي‌شود. اين دو تابع تكرارگري به اولين عنصر بعد از عناصر حذف شده برمي‌گردانند.
code:

iterator begin ();

تكرارگري به اولين عنصر vector برمي‌گرداند.
code:

iterator end ();

تكرارگري برمي‌گرداند كه درست به بعد از آخرين عنصر vector اشاره مي‌كند. اگر vector تهي باشد، اين مقدار با مقدار begin() برابر است.
code:

iterator rbegin ();

يك تكرارگر معكوس (reverse_iterator) به اولين عنصر در بردار معكوس شده برمي‌گرداند.
code:

iterator rend ();

يك تكرارگر معكوس برمي‌گرداند كه درست به بعد از آخرين عنصر در بردار معكوس شده اشاره مي‌كند.
code:

void resize ( size_t newsize );

void resize ( size_t newsize, type val );

اندازه vector را تغيير مي‌دهد. اگر مقدار newsize از اندازه فعلي vector كمتر باشد، عناصر از انتهاي vector حذف مي‌شوند تا اندازه آن به newsize برسد. اگر newsize بيشتر از اندازه فعلي vector باشد، عناصر جديد به انتهاي آن اضافه مي‌شوند. در صورت مشخص كردن مقدار val، اين عناصر با val مقداردهي  مي‌شوند؛ در غير اين صورت با مقدار پيش فرض مقدار دهي مي‌شوند.
code:

void assign ( size_t count, const type& val );

كليه عناصر vector را حذف كرده و count عنصر با مقدار val در آن درج مي‌كند.
code:

type& operator[] ( size_t pos );

همانطور كه گفته شد، يك مرجع (reference) به عنصر با انديس pos برمي‌گرداند.
code:

vector& operator= ( vector& right );

عملگر تخصيص دهي (assignment) براي كليه containerها به نحوي تعريف شده است كه يك كپي از container سمت راست در container سمت چپ عملگر تساوي مي‌سازد:
code:

      vector<int> v1(10,100);

      vector<int> v2 (5,990);

      v2 = v1;

بعد از عمل تخصيص دهي (assignment،( v2 نيز حاوي 10 عنصر با مقدار 100 خواهد بود.


_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال list 
می ریم سراغ لیست

code:
list < type > l; // tarif

list < type >::iterator  i; // tekrar gar

//print,  baraye vector ham hamin joori kar mikone
for ( i= l.begin() ; i!=l.end() ; ++i)
         cout << *i << endl; // bayad pointer bashe

l.push_back( value ); // eyne vector

l.sort(); // sort mikone , link peyvandi ham sort mikone !!

l.remove ( 3 ) ; // onsore 3om ro pak mikone

l.unique(); // tekrari ha ro [b]az list sort shode[/b]  hazf mikone

l.insert ( i , 1 ,10 ) ; // insert 1 copy of 10 here ( iterator )



_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال  
مقاله ی دوست گرامی جناب دهقان در مورد لیست :

list

 

كلاس list برخلاف vector اجازه دسترسي تصادفي به همه عناصر را نمي‌دهد ولي در عوض هر گونه عمل درج و حذف در آن با كارايي بالا انجام مي‌شود و در تمام اعمال درج و حذف، فقط تكرارگر مربوط به عنصر تحت تأثير نا معتبر مي‌شود. تكرارگرهاي كلاس list فقط مي‌توانند با عملگرهاي ++ و -- به اندازه يك عنصر به جلو يا عقب حركت كنند و امكان انديس گذاري نيز بر روي آن‌ها وجود ندارد.

اكثر توابع مربوط به list دقيقاً مانند vector هستند و فقط در نحوه انجام كار با آن تفاوت دارند. در زير مروري بر اين توابع مي‌كنيم:


code:
list();

list ( size_t count );

list ( size_t count, const type& val );

list ( const list& right );


سازنده كلاس list. اين سازنده‌ها دقيقا مانند سازنده‌هاي vector عمل مي‌كنند.



code:
size_t size();

bool empty();

void clear();

type& front();

type& back();

void push_back ( type& val );

void pop_back ();

iterator insert ( iterator where, const type& val );

void insert ( iterator where, size_t count, const type& val );

iterator erase ( iterator where );

iterator erase ( iterator first, iterator last );

iterator begin ();

iterator end ();

iterator rbegin ();

iterator rend ();

void resize ( size_t newsize );

void resize ( size_t newsize, type val );

void assign ( size_t count, const type& val );

list& operator= ( list& right );

 اين توابع نيز دقيقاً همان كاري را انجام مي‌دهند كه در كلاس vector انجام مي‌دادند. در واقع در اين ليست فقط توابع capacity() و reserve() موجود نيستند چرا كه list نيازي به تخصيص حافظه از قبل ندارد.


code:

void push_front ( type& val );

void pop_front ();

اين دو تابع كه در vector وجود نداشتند، عمل درج و حذف را از ابتداي ليست انجام مي‌دهند.


code:
void remove ( const type& val );


كليه عناصر موجود در ليست كه با val برابر باشند را حذف مي‌كند.



code:
void reverse ();


ترتيب عناصر را در ليست معكوس مي‌كند. در اين عمليات، تنها اشاره‌گرها تغيير مي‌كنند، بنا براين اين عمليات سريع و بهينه انجام مي‌شود (آن را با تابع reserve اشتباه نگيريد).

code:
void sort ();

عناصر ليست را به صورت صعودي مرتب مي‌كند.


_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال  
این هم یه مطلب جدا :

یه تابع برای پیاده سازی clrscr در visual studio :

code:

// Developed by Milad Yadollahi

#include <windows>

void clrscr()
{
  HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
  COORD coord = {0, 0};
  DWORD count;

  CONSOLE_SCREEN_BUFFER_INFO csbi;
  GetConsoleScreenBufferInfo(hStdOut, &csbi);

  FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

  SetConsoleCursorPosition(hStdOut, coord);
}

int main()
{
  clrscr();
  return 0;
}



_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال پشته و صف 
code:
#include <stack>

stack <type > s ; // tarif

s.push(value) ; // ye onsor ba meghdare value be balaye poshte ezafe mikone

if ( s.empty() )  ... ; // barrasi mikone ke poshte khali hast ya na

s.top () ; //  onsore balaye poshte ro bar migardoone bedoone inke taghiresh bede

s.pop() ; // onsore balaye poshte ro hazf mikone ( fek konam chizi bar nemigardoone )

Some stack implementations
1. Linked List with head pointer only (Best)
2. Array
3. Resizeable Array


code:
#include <queue>

queue <type> q ; // tarif

q.push(value); // be akhare saf ezafe mikone

q.pop(); // az joloye saf hazf mikone

q.front(); // onsore joloye saf ro bar migardoone

q.empty() ; // ye bitmap ke barrasi mikone saf khali hast ya na



_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی

پاسخ بصورت نقل قول
ارسال  
خوب امید وارم تا اینجا مفید بوده باشه بیده.

فلصل پنجم در مورد ورودی و خروجی هاست که به نظر من بهتره در مورد کار با iostream و انواع دستورات و کاربرد های لازمش صحبت کنیم .قسمت هایی از مقاله جناب دهقان رو براتون می زارم :

قسمت اول:



iostream

 

جريان‌ها در C++ براي ورودي و خروجي كنسول (كيبورد و صفحه نمايش) و فايل‌ها به كار مي‌رود. براي ورودي و خروجي كنسول از دو كلاس istream و ostream استفاده مي‌شود كه در سر فايل <iostream> ( نه <iostream> ، اين سر فايل ديگر منسوخ شده است) تعريف شده‌اند. در ضمن همه كلاس‌ها و توابع STL در فضاس نام std تعريف شده‌اند كه براي استفاده از آن‌ها يا بايد نام فضاي نام را قبل از نام كلاس يا شيء قرار دهيد ( مثلاً std::vector يا std::cout ) و يا بايد با استفاده از دستور using namespace به compiler اعلام كنيد كه از فضاي نام  std استفاده مي‌كنيد ( به صورت using namespace std;).

معمولاً شما مستقيماً از كلاس‌هاي istream و ostream استفاده نمي‌كنيد، بلكه از دو شيء كه از اين كلاس‌ها تعريف شده‌اند، به نام‌هاي cin و cout استفاده مي‌كنيد. همانطور كه مي‌دانيد، به طور معمول براي استخراج از يك جريان ورودي از عملگر استخراج از جريان (>>) و براي درج در يك جريان خروجي از عملگر درج در جريان (<<) استفاده مي‌كنيم.

ابتدا كلاس istream را بررسي مي‌كنيم.

اين كلاس شامل توابعي است كه بسياري از كارها را راحت‌تر مي‌كنند. شرح بعضي از اين توابع را مي‌بينيد:

 
code:

istream& getline ( char *str, int count, char delim = ‘\n’ )

اين تابع، يك خط از جريان ورودي خوانده و آن را در str ذخيره مي‌كند.

اين تابع به خواندن از جريان ورودي ادامه مي‌دهد تا يكي از شرايط زير اتفاق بيفتد:

•   به انتهاي فايل برسد.

•   به كاراكتري برسد كه با delim مشخص شده‌است (delim مخفف delimiter به معناي جدا كننده يا حائل است). در اين صورت اين كاراكتر از ورودي حذف مي‌شود ولي در str درج نمي‌شود. توجه كنيد كه مقدار پيش فرض اين پارامتر ‘\n’ است؛ يعني اگر اين پارامتر را مشخص نكنيد، به طور پيش فرض، خواندن در انتهاي خط متوقف مي‌شود.

•   مقدار count-1 كاراكتر خوانده شود.

در هر صورت، به انتهاي str يك كاراكتر ‘\0’ اضافه مي‌شود.

مثال‌هاي زير موضوع را روشن مي‌كند:

code:
#include <iostream>

 

using namespace std;

 

void main()

{

    char s1[100], s2[100];

    cin >> s1;

    cin.getline ( s2, 100 );

    cout << "s1 = " << s1 << endl;

    cout << "s2 = " << s2 << endl;

}

اگر ورودي اين برنامه به اين صورت باشد:

welcome, this is a line

آنگاه خروجي به صورت زير خواهد بود:

code:
s1 = welcome,

s2 =  this is a line

علت اين است كه عملگر استخراج از جريان، عمل خواندن را هنگام رسيدن به فضاي خالي متوقف مي‌كند، و همان‌ظور كه توضيح داده شد، تابع getline عمل خواندن را در انتهاي خط متوقف مي‌كند.

*****

 

code:
int get ();

istream& get ( char &ch )

istream& get ( char *str, int count, char delim = ‘\n’ )

 

تابع get ، بدون هيچ پارامتري (نوع اول)، كاراكتر بعدي را از ورودي خوانده و برمي‌گرداند؛ درصورتي كه خواندن ممكن نباشد (مثلا در مورد فايل‌ها، اگر به انتهاي فايل رسيده باشد) اين تابع مقدار trails_type::eof() را برمي‌گرداند (كه برابر -1 است).

نوع دوم اين تابع، مانند نوع اول كاراكتر بعدي را خوانده ولي آن را در ch ذخيره مي‌كند. در صورتي كه اين تابع موفق به خواندن نشود، پرچم failbit را در شيء istream مقدار دهي ميكند. براي بررسي مقدار اين پرچم، از تابع fail() استفاده كنيد (در اين مورد، بعداً بيشتر توضيح داده مي‌شود) .

نوع سوم، دقيقاً مانند تابع getline عمل مي‌كند با اين تفاوت كه كاراكتر delim را از ورودي حذف نمي‌كند. يعني اگر بعد از اينكه اين تابع، با رسيدن به delim (مثلاً ‘\n’ ) متوقف شد، مجداداً با همان پارامترهاي قبلي صدا شود، بدون خواندن هيچ كاراكتري بازگشت مي‌كند، زيرا به محض آغاز عمل خوندن به كاراكتر جداكننده مي‌رسد و كاراكتر جداكننده همچنان در ورودي باقي مي‌ماند.

*****

code:
ignore ( int count = 1, char delim = trails_type::eof() );

اين تابع، به مقدار count كاراكتر از ورودي را حذف كرده و دور مي‌ريزد. اگر قبل از خوانده شدن count كاراكتر، به كاراكتر مشخص شده با delim برسد، عمل خواندن متوقف مي‌شود. مقدار پيش فرض delim كاراكتر EOF (پايان فايل) است. مقدار پيش فرض count نيز يك است. يعني استفاده از تابع ignore() بدون هيچ پارامتري، يك كاراكتر را از ورودي حذف مي‌كند. اين تابع براي مواقعي كاربرد دارد كه تعدادي از كاراكترها مورد نياز شما نباشد و بخواهيد آن‌ها را از ورودي حذف كنيد. مثال‌هاي زير را در نظر بگيريد:

 

code:
#include <iostream>

 

using namespace std;

 

void main()

{

    int i, j;

    cin >> i;

    cin.ignore ( 80, '\n' );

    cin >> j;

    cout << i << endl << j << endl;

}

 

code:
Input:

12stgh dddd

456

 

Output:

12

456

 

--------------------

 

code:
#include <iostream>

void main( )

{

    using namespace std;

    char chararray[10];

    cout << "Type 'abcdef': ";

    cin.ignore( 5, 'c' );

    cin >> chararray;

    cout << chararray;

}

 

 

code:
Input:

abcdef

 

Output:

def



_________________
آگه 50000 نفر هم به یک چیز اشتباه اعتقاد داشته باشن , اون چیز هنوز هم اشتباه است !

محمـــــــــــــــــــــدرضا . اگر گه گاهی سراغتون افتاد , خوشحال میشم : http://360.yahoo.com/molla652003

سوابق کاریه من :

معاد
روزی یک حدیث
ACM_sharif
طراحی الگوریتم
در اعماق بی کران
Art Of Programming
عکس های بچه ها
نماز
معرفی سایت های مفید
شعر های دوران مهدکودک
موفقیت
موسیقی
نمايش نامه هاي ارسال شده قبلي:
پاسخ به يك موضوع صفحه 2 از 3
برو به صفحه قبلي  1, 2, 3  بعدي