(Ahmed Yasser)MY Code
660 subscribers
54 photos
6 videos
25 files
83 links
لو معاك أي سؤال يا صديقي
ابعت أن شاء الله اقدر افيدك
@A_H_M_E_DY_A_S_S_E_R

حساب لنكيد إن
https://www.linkedin.com/in/ahmed-yasser-358536297?utm_source=share_via&utm_content=profile&utm_medium=member_android
Download Telegram
Some information about iterators:
======================
In every standard container (like vectors & maps), there are 4 different types of iterators, which are "iterator", "const_iterator", "reverse_iterator", and "const_reverse_iterator".

1. iterator: It's used to traverse through the container from the start to the end of the container. It allows you to modify the value of the current element.

2. const_iterator: It's used to traverse through the container from the start to the end of the container, but doesn't allow you to modify the value of the current element (read-only).

3. reverse_iterator: It's used to traverse through the container from the end to the start of the container. It allows you to modify the value of the current element.

4. const_reverse_iterator: It's used to traverse through the container from the end to the start of the container, but doesn't allow you to modify the value of the current element (read-only).
-----------------------------------------
When using iterators in regular for loops to traverse through standard containers (like vectors & maps), there are 8 different methods that return different types of iterators pointing at different parts of the container.

These methods are: begin(), end(), rbegin(), rend(), cbegin(), cend(), crbegin(), crend()

1. begin(): It returns an "iterator" or "const_iterator" object pointing at the first element of the container. It has 2 overloaded versions.

2. end(): It returns an "iterator" or "const_iterator" object pointing at a position after the last element of the container. It doesn't point at any element. It has 2 overloaded versions.

3. rbegin(): It returns a "reverse_iterator" or "const_reverse_iterator" object pointing at the first element from the end of the container. In other words, it points at the last element of the container. It has 2 overloaded versions.

4. rend(): It returns a "reverse_iterator" or "const_reverse_iterator" object pointing at a position before the first element of the container. It doesn't point at any element. It has 2 overloaded versions.

5. cbegin(): It returns only a "const_iterator" object pointing at the first element of the container.

6. cend(): It returns only a "const_iterator" object pointing at a position after the last element of the container. It doesn't point at any element.

7. crbegin(): It returns only a "const_reverse_iterator" object pointing at the first element from the end of the container. In other words, it points at the last element of the container.

8. crend(): It returns only a "const_reverse_iterator" object pointing at a position before the first element of the container. It doesn't point at any element.

The 'r' at the start stands for "reverse", while the 'c' stands for "const".

The images attached explain how to use iterators and these functions to traverse through a vector in a regular for loop.
1
سلام عليكم ورحمه الله وبركاته
شرح
New
Delete
أن شاء الله تفهمه يا شباب
موفقين ان شاء الله ❤️
فرق بين
Pass by Reference
Pass by value
تخيل معاك كتاب أصلي في المكتبة 📖

لما تيجي تقول لصاحبك: "استلف نسخة مصورة من الكتاب" → هو خد صورة طبق الأصل بس مش الأصل.

دلوقتي صاحبك كتب ملاحظات على النسخة اللي معاه، هل الكتاب الأصلي اللي في المكتبة اتغير؟ 🤔
→ لأ طبعًا، لأن اللي معاه مجرد نسخة (وده يشبه بالظبط Pass by Value).



---

طيب لو صاحبك مسك الكتاب الأصلي من المكتبة ✍️

وابتدى يكتب فيه ملاحظات أو يمسح سطور… هل المكتبة هتفضل زي ما هي؟
→ لأ طبعًا، هيتأثر الكتاب الأصلي، لأن التعديل كان على النسخة الأصلية نفسها (وده يشبه بالظبط Pass by Reference).


---

إذن:

Pass by Value = خد نسخة مصورة من الكتاب، أي تعديل مش هيوصل للأصل.

Pass by Reference = بتكتب في الكتاب الأصلي، فأي تعديل هيبان فورًا.



---
1
Ahmed Yasser
c++.pdf
ملف كنت كاتبه به معلومات
عن الكورس 1 و2و 3 مع البشمهندس ابو هدهود
🔹 ما هي Dark Reader؟

هي إضافة (Extension) للمتصفح (زي Chrome أو Firefox أو Edge) وظيفتها إنها تحول أي موقع إلى الوضع الداكن (Dark Mode) حتى لو الموقع ما بيدعمش الوضع داكن رسميًا.

بتغير الألوان (خلفية غامقة + نص فاتح).

ممكن تتحكم في السطوع (Brightness) والتباين (Contrast) ودرجات الرمادي.

تقدر تعمل استثناءات لمواقع معينة.

مفيدة للعين بالليل وبتقلل من إجهاد النظر.



---

🔹 كيف تضيفها؟

الطريقة تعتمد على نوع المتصفح عندك:

📌 Google Chrome:

1. افتح Chrome Web Store.


2. في البحث اكتب Dark Reader.


3. اضغط Add to Chrome (إضافة إلى Chrome).


4. هيطلب تأكيد → اضغط Add Extension.
بعد كده هتلاقي أيقونة Dark Reader جنب شريط العنوان.



📌 Firefox:

1. افتح Firefox Add-ons.


2. اكتب في البحث Dark Reader.


3. اضغط Add to Firefox (إضافة إلى فايرفوكس).


4. وافق على الأذونات.



📌 Microsoft Edge:

1. افتح Edge Add-ons Store.


2. دور على Dark Reader.


3. اضغط Get → Add Extension.




---

🔹 الاستخدام:

بعد التثبيت هيظهرلك أيقونة 🌓 بجانب شريط العنوان.

اضغط عليها تقدر:

تشغل/توقف الوضع الداكن.

تتحكم في السطوع والتباين.

تضيف مواقع في قائمة الاستثناءات (مثلاً تخلي فيسبوك غامق لكن جوجل عادي).
🚀 رحلتك مع أول برنامج في ++C

هل تتخيل أنك بسطور قليلة فقط تقدر تكتب برنامج كامل يظهر رسالة على الشاشة؟
هذا هو سحر لغة ++C!
خلينا ندخل معًا ونفهم البرنامج الأساسي خطوة بخطوة 👇


---

تركيب البرنامج الأساسي في ++C

#include <iostream>
using namespace std;

int main()
{
cout << "Hello, World!" << endl;
return 0;
}


---

📝 شرح مكونات الكود

1️⃣ #include <iostream>

🔹 معناها: نخبر المترجم أن يضمّن مكتبة iostream الخاصة بالإدخال والإخراج.
🔹 التفاصيل:

#include → تعليمة للـ Preprocessor (المعالج المسبق).

<iostream> → تحتوي على أدوات الإدخال (cin) والإخراج (cout).



---

2️⃣ using namespace std;

🔹 وظيفتها: عشان ما نكتبش std::cout كل مرة، نستعملها مباشرة كـ cout.
🔹 التفاصيل:

namespace: مساحة اسم تحتوي على دوال ومتغيرات.

std: هي المساحة القياسية التي تضم كل أدوات ++C الأساسية.



---

3️⃣ int main()

🔹 الدالة الرئيسية التي يبدأ منها تنفيذ البرنامج.
🔹 التفاصيل:

int → نوع الإرجاع (عدد صحيح).

main() → لا يوجد برنامج ++C بدونها.



---

4️⃣ { }

🔹 الأقواس تحدد بداية ونهاية الكود الخاص بالدالة main.
🔹 أي شيء بداخلها يتم تنفيذه عند تشغيل البرنامج.


---

5️⃣ cout << "Hello, World!" << endl;

🔹 السطر الذي يطبع رسالة على الشاشة.
🔹 التفاصيل:

cout → كائن الإخراج (يُرسل البيانات للشاشة).

<< → عامل الإرسال.

"Hello, World!" → النص المراد طباعته.

endl → ينقل المؤشر لسطر جديد.



---

6️⃣ return 0;

🔹 معناها: البرنامج انتهى بنجاح.
🔹 القيمة 0 = لا توجد أخطاء.


---

⚙️ خطوات كتابة وتشغيل البرنامج

1️⃣ افتح بيئة التطوير (IDE) مثل Visual Studio أو Code::Blocks.
2️⃣ أنشئ مشروع جديد (Console Application).
3️⃣ اكتب الكود السابق داخل ملف main.cpp.
4️⃣ احفظ الملف.
5️⃣ قم بالـ Build & Run:

في Visual Studio → Ctrl + F5

في Code::Blocks → F9


النتيجة المتوقعة على الشاشة:

Hello, World!


---

ماذا يحدث عند التشغيل؟

1- يبدأ التنفيذ من main().
2- يتم إرسال الرسالة إلى cout وتظهر على الشاشة.
3- endl ينقلك لسطر جديد.
4- return 0; يخبر النظام أن البرنامج انتهى بسلام.


---

🛠️ تعديلات بسيطة ممتعة!

بدل النص:


cout << "Welcome to C++ Programming!" << endl;

اطبع أكثر من جملة:


cout << "Hello, World!" << endl;
cout << "This is my first C++ program." << endl;


---

📌 الخلاصة

البرنامج الأساسي في ++C يتكون من:

المكتبات (#include).

مساحة الاسم (using namespace std;).

الدالة الرئيسية (int main()).

أوامر الإخراج (cout).

إنهاء البرنامج (return 0;).
📌 أولًا: ما هو الـ Stack؟

الـ Stack (المكدس) هو بنية بيانات (Data Structure) بتشتغل بنظام:
Last In, First Out (LIFO) = "اللي يدخل آخر يخرج أول".
📦 زي كومة أطباق، آخر طبق تحطه فوق هو أول طبق تاخده.


---

📌 ثانيًا: ما هو الـ Call Stack؟

الـ Call Stack هو مكان في الذاكرة بيحتفظ فيه البرنامج بكل الاستدعاءات (calls) للدوال (functions) اللي شغالة في اللحظة دي.
يعني:

كل ما تنادي على دالة → بيتضاف "إطار" (Stack Frame) في الـ call stack.

لما تخلص الدالة → بيتشال الإطار من الـ stack.



---

📌 ثالثًا: ما هو Stack Frame؟

كل دالة بتستدعيها ليها "صندوق خاص" (Stack Frame) بيتخزن فيه:

1. عنوان العودة (Return Address): عشان لما تخلص الدالة يعرف يرجع فين.


2. المتغيرات المحلية (Local Variables) داخل الدالة.


3. البراميترز (Parameters) اللي اتبعتت للدالة.




---

📌 رابعًا: مثال عملي في C++

#include <iostream>
using namespace std;

void funcC() {
int c = 30;
cout << "Inside funcC, c = " << c << endl;
}

void funcB() {
int b = 20;
cout << "Inside funcB, b = " << b << endl;
funcC(); // استدعاء funcC
}

void funcA() {
int a = 10;
cout << "Inside funcA, a = " << a << endl;
funcB(); // استدعاء funcB
}

int main() {
cout << "Program start" << endl;
funcA(); // استدعاء funcA
cout << "Program end" << endl;
return 0;
}


---

🧠 إيه اللي بيحصل في الـ Call Stack؟

1. يبدأ البرنامج في main() → يتضاف Stack Frame خاص بـ main.


2. main استدعى funcA → يتضاف Stack Frame لـ funcA.


3. funcA استدعى funcB → يتضاف Stack Frame لـ funcB.


4. funcB استدعى funcC → يتضاف Stack Frame لـ funcC.


5. funcC خلصت → بيتشال Stack Frame بتاعها.


6. يرجع لـ funcB → يكمل وينتهي → يتم حذفه.


7. يرجع لـ funcA → يكمل وينتهي → يتم حذفه.


8. في الآخر يرجع لـ main → يكمل وينتهي → يتم حذفه.




---

📌 خامسًا: أهمية الـ Call Stack

تتبع الاستدعاءات: يعرف البرنامج أي دالة بتشتغل حاليًا.

إدارة الذاكرة: يخزن المتغيرات المحلية مؤقتًا.

التصحيح (Debugging): لما يحصل خطأ (مثلاً Stack Overflow) المترجم بيطبع "Stack Trace" يوضح سلسلة الاستدعاءات.



---

🎯 الخلاصة:

الـ Call Stack = دفتر متابعة الاستدعاءات للدوال.

كل دالة بتتنادى → ليها صندوق خاص (Stack Frame).

بيتشال الصندوق أول ما الدالة تخلص.

شبيه بكومة أطباق → "آخر دالة تدخل هي أول دالة تخرج".
من اين يبدأ تنفيذ البرنامج
من الدول الأساسية
Int main وتعتبر
نقطة الانطلاق entry point
طيب
📌 ما معنى Entry Point؟

Entry Point = هو المكان الأول اللي يبدأ منه تنفيذ البرنامج.

زي "باب البداية" أو "نقطة البداية" اللي المترجم (Compiler) بيخش منها عشان يشغل الكود.



---

📌 في C++

في لغة C++، الـ Entry Point الافتراضية هي الدالة main().
يعني مهما كان عندك دوال أو كلاسات أو ملفات... التنفيذ لازم يبدأ من main.

#include <iostream>
using namespace std;

int main() {
cout << "Program started here!" << endl;
return 0;
}

🔹 هنا:

main هي Entry Point.

المترجم بيروح مباشرةً ليها ويبدأ يقرأ التعليمات منها خطوة بخطوة.



---

📌 طيب إزاي البرنامج يعرف يرجع بعد ما يخلص؟

الدالة main() لازم ترجع قيمة عددية (int).

القيمة دي بتروح لنظام التشغيل (OS) وتوضح إذا كان البرنامج خلص بنجاح ولا حصل خطأ.

return 0; → البرنامج خلص بنجاح.

أي رقم آخر → فيه خطأ أو حالة خاصة.




---

📌 أمثلة واقعية:

1. برنامج بسيط:



int main() {
return 0; // نقطة البداية ونهاية التنفيذ
}

2. مع دوال أخرى:



#include <iostream>
using namespace std;

void sayHello() {
cout << "Hello!" << endl;
}

int main() {
sayHello(); // التنفيذ يبدأ هنا
return 0;
}

🔹 مهما كان فيه دوال ثانية (sayHello) التنفيذ مش هيبدأ بيها، لازم يمر بـ main() الأول.


---

📌 الخلاصة:

Entry Point = المكان اللي يبدأ منه تشغيل البرنامج.

في C++، الـ Entry Point دائمًا هي main().

من خلالها تقدر تستدعي باقي الدوال والكلاسات.