#include <bits/stdc++.h>
using namespace std;
// تعريف اختصار للنوع long long
#define ll long long
int main() {
int n = 5;
// إنشاؤ vectors بأحجام مختلفة وقيم ابتدائية مختلفة:
vector<int> v; // vector فارغ من نوع int
vector<int> v1(n); // vector بحجم n، جميع العناصر مهيأة للـ 0
vector<int> v2(n, -1); // vector بحجم n، جميع العناصر مهيأة إلى -1
vector<int> v3 = {1, 2, 3, 4}; // vector مع عناصر معينة
// الوصول إلى عناصر v3 بطرق مختلفة:
cout << v3[0] << endl; // الوصول لمباشر (1)
cout << v3.at(0) << endl;
cout << v3.front() << endl; // أول عنصر (1)
cout << v3.back() << endl; // آخر عنصر (4)
// قراءة قيم لـ v1 من المستخدم
for (int i = 0; i < n; i++) {
cin >> v1[i];
}
// قراءة قيم من المستخدم وحفظها في نهاية v2 باستخدام push_back
for (int i = 0; i < n; i++) {
int x;
cin >> x;
v2.push_back(x); // يمكن استخدام emplace_back أيضاً
}
// إضافة عنصر ثابت 5 لنهاية v2
v2.push_back(5);
// طباعة محتويات v2 بعد الإضافة
for (int i = 0; i < (int)v2.size(); i++) {
cout << v2[i] << ' ';
}
cout << endl;
// حذف آخر عنصر من v2
v2.pop_back();
// طباعة محتويات v2 بعد الحذف
for (int i = 0; i < (int)v2.size(); i++) {
cout << v2[i] << ' ';
}
cout << endl;
// تغيير حجم v1 إلى 2*n (عناصر إضافية ستكون قيمها غير مهيأة بصفة صريحة)
v1.resize(2 * n);
// تعيين جميع عناصر v1 إلى القيمة 5 مع حجم 2*n
// هذا يعيد تعيين حجم v1 ويملأه بالقيمة 5
v1.assign(2 * n, 5);
// طباعة محتويات v3 باستخدام حلقة for-each (range-based for)
for (auto el : v3)
cout << el << endl;
// طباعة محتويات v3 باستخدام المكررات (iterators)
for (auto it = v3.begin(); it != v3.end(); it++)
cout << *it << endl;
// فرز عناصر v3 بترتيب تصاعدي
sort(v3.begin(), v3.end());
// تعريف واستخدام أزواج (pair)
pair<int, int> point; // زوج فارغ (يحتوي على قيم مهيأة بشكل غير محدد)
pair<int, int> point1(1, 2); // زوج مهيأ بقيم (1, 2)
pair<int, string> point2 = {3, "three"}; // زوج يحتوي على int و string
// طباعة محتويات الزوج point2
cout << point2.first << ' ' << point2.second << endl; // 3 three
// تحديث قيم الزوج بطريقتين:
point2 = {2, "two"}; // تعيين كامل جديد
point2.first = 1; // تعيين العنصر الأول
point2.second = "one"; // تعيين العنصر الثاني
// (خطأ) محاولة تعيين int إلى عنصر من نوع string، لن يقبلها المترجم!
// point2.second = 4;
return 0;
}