Media is too big
VIEW IN TELEGRAM
#سی_پلاس_ساده_و_خوشمزه
#پیشرفته
قسمت 14: تعریف کلاس، شی و نمونه سازی ، سطح دسترسی و access modifier ها
مدرس: محمدصالح حق محمدلو
🟢لطفا سوالات، نظرات و کدهای خود را برای ما کامنت کنید
#پیشرفته
قسمت 14: تعریف کلاس، شی و نمونه سازی ، سطح دسترسی و access modifier ها
مدرس: محمدصالح حق محمدلو
🟢لطفا سوالات، نظرات و کدهای خود را برای ما کامنت کنید
#نکته
در مهندسی نرم افزار به عنوان یه قانون عضو های داده ای (data members ) یا همون متغییر های خودمونو و صفات خودمونو بهتره به صورت private و عضو های تابعی(member functions) یا همون توابع و رفتار های خودمونو به صورت public تعریف کنیم.
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
در مهندسی نرم افزار به عنوان یه قانون عضو های داده ای (data members ) یا همون متغییر های خودمونو و صفات خودمونو بهتره به صورت private و عضو های تابعی(member functions) یا همون توابع و رفتار های خودمونو به صورت public تعریف کنیم.
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
💬 #چالش
برنامه ای بنویسید که دو عدد a و b را از کاربر دریافت کند و اعداد اول بین آنهارا بصورت نزولی چاپ کند. اعداد خروجی را با کاما از یکدیگر جدا کنید.
🟥درجه سختی: متوسط
🟢لطفا کد، سوالات و نظرات خود را برای ما کامنت یا داخل گروه ارسال کنید.
برنامه ای بنویسید که دو عدد a و b را از کاربر دریافت کند و اعداد اول بین آنهارا بصورت نزولی چاپ کند. اعداد خروجی را با کاما از یکدیگر جدا کنید.
🟥درجه سختی: متوسط
🟢لطفا کد، سوالات و نظرات خود را برای ما کامنت یا داخل گروه ارسال کنید.
🧠 #کد_چالش
حل توسط جناب: amir
🟢لطفا سوالات، کد و نظرات خود را برای ما کامنت کنید.
حل توسط جناب: amir
#include<iostream>
using namespace std;
bool isAval(int number)
{
for (size_t i = 3; i < number; i += 2)
{
if(number % i == 0){
return false;
}
}
return true;
}
int main()
{
int first_number, second_number;
cout << "Enter first number" << endl;
cin >> first_number;
cout << "Enter second number" << endl;
cin >> second_number;
string result = "";
if(first_number < 2 && second_number > 2){
result += "2,";
}
first_number = first_number % 2 == 0 ? first_number + 1 : first_number + 2;
second_number = second_number % 2 == 0 ? second_number - 1 : second_number - 2;
for (size_t i = second_number; i >= first_number; i -= 2)
{
if(isAval(i)){
result += to_string(i) + ",";
}
}
cout << result.substr(0, result.length() - 1) << endl;
}🟢لطفا سوالات، کد و نظرات خود را برای ما کامنت کنید.
Tp hunters cpp
🧠 #کد_چالش حل توسط جناب: amir #include<iostream> using namespace std; bool isAval(int number) { for (size_t i = 3; i < number; i += 2) { if(number % i == 0){ return false; } } return true; } int main() { int…
💬 #شرح_کد
توضیحات توسط جناب :amir
یه تابع isAval نوشتم که یه عدد دریافت میکنه و بررسی میکنه اوله یا نه
عددی اوله که به جز یک و خودش، مقسوم علیهی نداشته باشه
حلقه رو از ۳ شروع میکنم (چون اگر قرار باشه به ۲ بخش پذیر باشه قطعا اول نیست)
و تا قبل خود عدد میرم جلو پس قاعدتا باید نباید مقسوم علیهی داشته باشه اگر اول باشه
اگر داشت ک ریترن فالس و تابع تموم میشه
اگر حلقه تموم شد و عددی پیدا نشد ریترن ترو
تو مین هم اومدم عددارو دریافت کردم. یه رشته هم گذاشتم که رشته مقسوم علیه ها رو قراره تو خودش نگه داره. اگر ۲ بین دوتا عدد بود، همینجا به رشته اضافه میکنمش. چون مرحله های بعدی میخوام با عددای زوجو حذف کنم که سریع تر شه برنامه
برای اینکه عددای اول بین دوتا عددو بگیرم به شروع یکی اضافه و از انتها یکی کم میکنم
ولی خب ممکنه زوج بشه و حلقه بعدی رو خراب کنه. واس همین میگم اگر فرد بودن (که به +- ۱ زوج شن) ، +- ۲ میکنم
بعدشم از تابع اول بودن عددای بین بازه رو بررسی میکنم
اگر اول بود به رشته اضافه میکنم با کاما
یه کاما اخرش اضافی میمونه که با substr حرف اخرو حذف میکنم
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
توضیحات توسط جناب :amir
یه تابع isAval نوشتم که یه عدد دریافت میکنه و بررسی میکنه اوله یا نه
عددی اوله که به جز یک و خودش، مقسوم علیهی نداشته باشه
حلقه رو از ۳ شروع میکنم (چون اگر قرار باشه به ۲ بخش پذیر باشه قطعا اول نیست)
و تا قبل خود عدد میرم جلو پس قاعدتا باید نباید مقسوم علیهی داشته باشه اگر اول باشه
اگر داشت ک ریترن فالس و تابع تموم میشه
اگر حلقه تموم شد و عددی پیدا نشد ریترن ترو
تو مین هم اومدم عددارو دریافت کردم. یه رشته هم گذاشتم که رشته مقسوم علیه ها رو قراره تو خودش نگه داره. اگر ۲ بین دوتا عدد بود، همینجا به رشته اضافه میکنمش. چون مرحله های بعدی میخوام با عددای زوجو حذف کنم که سریع تر شه برنامه
برای اینکه عددای اول بین دوتا عددو بگیرم به شروع یکی اضافه و از انتها یکی کم میکنم
ولی خب ممکنه زوج بشه و حلقه بعدی رو خراب کنه. واس همین میگم اگر فرد بودن (که به +- ۱ زوج شن) ، +- ۲ میکنم
بعدشم از تابع اول بودن عددای بین بازه رو بررسی میکنم
اگر اول بود به رشته اضافه میکنم با کاما
یه کاما اخرش اضافی میمونه که با substr حرف اخرو حذف میکنم
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
#نکته
در برنامه نویسی گاهی پیش میاد که بخوایم نوع متغیری که تعریف کرده ایم رو عوض کنیم بدون اینکه در تعریف اولیه متغیر ها دستکاری کنیم.
مثلاً نوع متغیر را
با اینکار بدون اینکه تغییری در نوع متغیر هامون ایجاد کرده باشیم، میتونیم حاصل تقسیم رو به صورت اعشاری هم نمایش بدیم.
(بررسی کنید که در همین برنامه تقسیم، اگر فقط یکی از متغیر هامون رو با ساختار بالا بنویسیم، نتیجهاش یکسان خواهد بود؟)
پ.ن: به این عمل type casting گفته میشود.
🟢 لطفا سوالات و نظرات خود را برای ما کامنت کنید.
@tphunterscpp
در برنامه نویسی گاهی پیش میاد که بخوایم نوع متغیری که تعریف کرده ایم رو عوض کنیم بدون اینکه در تعریف اولیه متغیر ها دستکاری کنیم.
مثلاً نوع متغیر را
int تعریف کردیم و میخواهیم برنامهی تقسیمی بنویسیم که حاصل تقسیم رو با اعشار هم نمایش دهد. برای این منظور میتوانیم به طریق زیر عمل کنیم:int x, y;
float z = (float) x / (float) y;با اینکار بدون اینکه تغییری در نوع متغیر هامون ایجاد کرده باشیم، میتونیم حاصل تقسیم رو به صورت اعشاری هم نمایش بدیم.
(بررسی کنید که در همین برنامه تقسیم، اگر فقط یکی از متغیر هامون رو با ساختار بالا بنویسیم، نتیجهاش یکسان خواهد بود؟)
پ.ن: به این عمل type casting گفته میشود.
🟢 لطفا سوالات و نظرات خود را برای ما کامنت کنید.
@tphunterscpp
Media is too big
VIEW IN TELEGRAM
#سی_پلاس_ساده_و_خوشمزه
#پیشرفته
قسمت 15: توابع و کلاس های دوست یا friend
مدرس:محمدصالح حق محمدلو
🟢لطفا نظرات، کد و سوالات خود را برای ما کامنت کنید.
#پیشرفته
قسمت 15: توابع و کلاس های دوست یا friend
مدرس:محمدصالح حق محمدلو
🟢لطفا نظرات، کد و سوالات خود را برای ما کامنت کنید.
گفتگو های صوتی کانال رو در کلاب هاوس اجرا کنیم یا داخل همین ویس چت تلگرام؟
Anonymous Poll
8%
کلاب هاوس
78%
تیلگرام
14%
فرقی به حالم نمیکنه جفتشو میام
Media is too big
VIEW IN TELEGRAM
#سی_پلاس_ساده_و_خوشمزه
#پیشرفته
قسمت 16: سازنده و مخرب و انواع آن ها، constructor , destructor
مدرس: محمدصالح حق محمدلو
🟢لطفا سوالات، کد و نظرات خود را برای ما کامنت کنید
#پیشرفته
قسمت 16: سازنده و مخرب و انواع آن ها، constructor , destructor
مدرس: محمدصالح حق محمدلو
🟢لطفا سوالات، کد و نظرات خود را برای ما کامنت کنید
طبق برنامه همیشه, هر هفته سه شنبه ها ساعت 9 شب ویس چت داخل چنل برگزار میشه در پیرامون مباحث کامپیوتر زبان ها و... به صورت آزاد , همه دوستان میتونن شرکت کنن و از تجربیات یا دانش خودشون در اختیار ما بزارن.🌹
ویس چت فردا در مورد تاریخچه و ظهور سی پلاس و کاربرد های اون هست
ساعت 9 شب منتظرتون هستیم😄👌🌹
ویس چت فردا در مورد تاریخچه و ظهور سی پلاس و کاربرد های اون هست
ساعت 9 شب منتظرتون هستیم😄👌🌹
Forwarded from Tp hunters (No Name!)
🟢💬درود دوستان، در حال تشکیل یک استارتاپ در حوزه blockchain هستیم.
از دوستانی که در این زمینه به صورت تخصصیکار میکنند( SWFT ) یا دوستانی که میخواهند بلاکچین را به صورت حرفه ای و تخصصی(تصمیم مطمعن گرفتن) شروع کنند برای عضو شدن به آیدی زیر پیام دهند، دقت کنید شرایط سنی حتما زیر 23 سال هست
دوستان حتما باید به زبان انگلیسی مسلط باشن، و اهل تهران یا کرج(یا در غیر این صورت بتوانند در صورت نیاز به این دو شهر سفرکنند.
آیدی جهت ارتباط:
@systemchemist
❌(احتمال زیاد این پروژه در آینده توسط بانک مرکزی و وزارت ارتباطات پوشش داده شود)❌
از دوستانی که در این زمینه به صورت تخصصیکار میکنند( SWFT ) یا دوستانی که میخواهند بلاکچین را به صورت حرفه ای و تخصصی(تصمیم مطمعن گرفتن) شروع کنند برای عضو شدن به آیدی زیر پیام دهند، دقت کنید شرایط سنی حتما زیر 23 سال هست
دوستان حتما باید به زبان انگلیسی مسلط باشن، و اهل تهران یا کرج(یا در غیر این صورت بتوانند در صورت نیاز به این دو شهر سفرکنند.
آیدی جهت ارتباط:
@systemchemist
❌(احتمال زیاد این پروژه در آینده توسط بانک مرکزی و وزارت ارتباطات پوشش داده شود)❌
#نکته
در مهندسی نرم افزار یه نکته بسیار مهمی برای بهینه کردن برناممون داریم که مربوط به رشته ها و string میشه(وقتی بخوایم یک رشته رو به ورودی یک تابع پاس بدیم) کد زیر رو ببینید:
این کد بهینه نیست ، دلیلش هم اینه که از آرگومان name دوبار کپی ایجاد میشه یک بار داخل ارسال پارامتر، یک بار هم داخل انتساب اون به firstname ، برای اینکه این اتفاق نیفته میایم با refference همرو یه پارامتر فرض میکنیم😃 پس کد درستمون این شکلی میشه، وقتی بخوایم داخل تابع انتساب رشته ای بدیم
دقیقا ورودی مثل کپی کانستراکتوره.
❓سوال:❓ حالا یه سوال اینجا پیش میاد زرنگاتون بگید ببینم، چرا این اتفاق اینجا میفته؟ مثلا برای استرینگ میفته برای int نه نیازی نیست😃 منتظر جوابتون هستم😉
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
✅جواب در کامنت قرار داده شد
در مهندسی نرم افزار یه نکته بسیار مهمی برای بهینه کردن برناممون داریم که مربوط به رشته ها و string میشه(وقتی بخوایم یک رشته رو به ورودی یک تابع پاس بدیم) کد زیر رو ببینید:
Void set(string name){
Firstname = name;}این کد بهینه نیست ، دلیلش هم اینه که از آرگومان name دوبار کپی ایجاد میشه یک بار داخل ارسال پارامتر، یک بار هم داخل انتساب اون به firstname ، برای اینکه این اتفاق نیفته میایم با refference همرو یه پارامتر فرض میکنیم😃 پس کد درستمون این شکلی میشه، وقتی بخوایم داخل تابع انتساب رشته ای بدیم
void set(const string &name){
Firstname=name;}دقیقا ورودی مثل کپی کانستراکتوره.
❓سوال:❓ حالا یه سوال اینجا پیش میاد زرنگاتون بگید ببینم، چرا این اتفاق اینجا میفته؟ مثلا برای استرینگ میفته برای int نه نیازی نیست😃 منتظر جوابتون هستم😉
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
✅جواب در کامنت قرار داده شد
⭕️ کد نویسی تمیز یا clean code:
برنامه نویسی و کد زدن شامل ۳ بخش اصلی میشود
- درستی و کارآمدی یا correctness
- طراحی و نقشه یا design
- شیوه نگارش یا style
از بین موارد بالا، اولویت با درستی کد و بعد از آن، اولویت با طراحی کد میباشد.
بنابراین شاید اینطور به نظر برسد که استایل کد اهمیت چندانی ندارد!
خب باید عرض کنم که این طرز تفکر کاملاً اشتباهه و اگر میخواهید که برنامهنویس خوبی بشید لازمه که هر ۳ مورد رو رعایت بفرمایید.
خب برویم سراغ معرفی این موارد
❌ correctness ✅
اصلی ترین و مهم ترین بخش یک برنامه، درستی آن میباشد؛ یعنی بعد از آنکه ورودی را وارد کردیم، برنامه بر اساس انتظار ما عمل کند و خروجی مناسب را نمایش دهد.
----------------------------------------
🐆 design 🐌
بعد از کارآمدی باید بررسی کنیم که سرعت اجرای کد ما مطلوب است یا خیر.
اگر جواب منفی بود، احتمالاً کد شما بهترین طراحی ممکن را نداشته و باید به فکر یه راه جدید باشید!
طراحی در برنامه نویسی یعنی همون الگوریتم یا راهحلی که برای حل مسئله ازش استفاده میکنیم.
----------------------------------------
👨🏻💻 style 👩🏼💻
و اما بخش استایل که خیلی بهش توجه نمیشه و اهمیت آن زمانی مشخص میشود که بخواهیم در یک تیم، استارتاپ و یا شرکت مشغول به کار شویم و مجبور میشویم کد همکارمون رو ادامه بدیم و یا همکارمون کد ما رو ادامه بده و وای از اون روزی که کد استایل خوبی نداشته باشه!
استایل به طور کلی یعنی جوری کدمون رو نگارش کنیم که استاندارد باشه و برای بقیه قابل فهم باشد.
----------------------------------------
از این پس نکات مربوط به کدنویسی تمیز با #clean_code، به چنل اضافه خواهد شد.
🟡 منتظر سوالات و نظرات شما هستیم.
@tphunterscpp
برنامه نویسی و کد زدن شامل ۳ بخش اصلی میشود
:- درستی و کارآمدی یا correctness
- طراحی و نقشه یا design
- شیوه نگارش یا style
از بین موارد بالا، اولویت با درستی کد و بعد از آن، اولویت با طراحی کد میباشد.
بنابراین شاید اینطور به نظر برسد که استایل کد اهمیت چندانی ندارد!
خب باید عرض کنم که این طرز تفکر کاملاً اشتباهه و اگر میخواهید که برنامهنویس خوبی بشید لازمه که هر ۳ مورد رو رعایت بفرمایید.
خب برویم سراغ معرفی این موارد
:❌ correctness ✅
اصلی ترین و مهم ترین بخش یک برنامه، درستی آن میباشد؛ یعنی بعد از آنکه ورودی را وارد کردیم، برنامه بر اساس انتظار ما عمل کند و خروجی مناسب را نمایش دهد.
----------------------------------------
🐆 design 🐌
بعد از کارآمدی باید بررسی کنیم که سرعت اجرای کد ما مطلوب است یا خیر.
اگر جواب منفی بود، احتمالاً کد شما بهترین طراحی ممکن را نداشته و باید به فکر یه راه جدید باشید!
طراحی در برنامه نویسی یعنی همون الگوریتم یا راهحلی که برای حل مسئله ازش استفاده میکنیم.
----------------------------------------
👨🏻💻 style 👩🏼💻
و اما بخش استایل که خیلی بهش توجه نمیشه و اهمیت آن زمانی مشخص میشود که بخواهیم در یک تیم، استارتاپ و یا شرکت مشغول به کار شویم و مجبور میشویم کد همکارمون رو ادامه بدیم و یا همکارمون کد ما رو ادامه بده و وای از اون روزی که کد استایل خوبی نداشته باشه!
استایل به طور کلی یعنی جوری کدمون رو نگارش کنیم که استاندارد باشه و برای بقیه قابل فهم باشد.
----------------------------------------
از این پس نکات مربوط به کدنویسی تمیز با #clean_code، به چنل اضافه خواهد شد.
🟡 منتظر سوالات و نظرات شما هستیم.
@tphunterscpp
ویس چت امشب ساعت ۹ در پیرامون امنیت فضای سایبری خواهد بود👌
منتظر شما هستیم😃
منتظر شما هستیم😃
💬 #چالش
برنامه ای بنویسید که به ازای هر کلمه n حرفی که از کاربر دریافت میکند؛ n کلمه چاپ شود؛ بطوریکه هر بار یک حرف از اول کلمه که قبلا حذف نشده حذف می شود سپس حرف بعدی کلمه جایگزین حرف حذف شده، می شود.(برای درک بهتر سوال به عکس بالا مراجعه کنید)
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه کنید.
برنامه ای بنویسید که به ازای هر کلمه n حرفی که از کاربر دریافت میکند؛ n کلمه چاپ شود؛ بطوریکه هر بار یک حرف از اول کلمه که قبلا حذف نشده حذف می شود سپس حرف بعدی کلمه جایگزین حرف حذف شده، می شود.(برای درک بهتر سوال به عکس بالا مراجعه کنید)
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه کنید.
Tp hunters cpp
💬 #چالش برنامه ای بنویسید که به ازای هر کلمه n حرفی که از کاربر دریافت میکند؛ n کلمه چاپ شود؛ بطوریکه هر بار یک حرف از اول کلمه که قبلا حذف نشده حذف می شود سپس حرف بعدی کلمه جایگزین حرف حذف شده، می شود.(برای درک بهتر سوال به عکس بالا مراجعه کنید) 🟥درجه سختی:…
🧠 #کد_چالش
حل توسط جناب: S1N4M
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string word;
std::cin >> word;
for (unsigned i{}; i < word.size(); ++i) {
std::fill_n(word.begin(), i, word.at(i));
std::cout << word << "\n";
}
return 0;
}
🟢لطفا سوالات،نظرات و کد های خود را برای ما کامنت یا داخل گروه ارسال کنید.
حل توسط جناب: S1N4M
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string word;
std::cin >> word;
for (unsigned i{}; i < word.size(); ++i) {
std::fill_n(word.begin(), i, word.at(i));
std::cout << word << "\n";
}
return 0;
}
🟢لطفا سوالات،نظرات و کد های خود را برای ما کامنت یا داخل گروه ارسال کنید.
Tp hunters cpp
🧠 #کد_چالش حل توسط جناب: S1N4M #include <algorithm> #include <iostream> #include <string> int main() { std::string word; std::cin >> word; for (unsigned i{}; i < word.size(); ++i) { std::fill_n(word.begin(), i, word.at(i)); std::cout << word…
💬 #شرح_کد
توضیحات توسط جناب : S1N4M
سوال گفته یه کد بنویسید که به ازای هر کلمه n حرفی, nتا کلمه چاپ بشه و در هر قدم از اندیس i به قبل، همه حروف برابر همون حرف iم از کلمه بشن.
یه کاری که میشه انجام داد
for (int j=0; j < i; j++)
word[j] = word[i];
که یکی از دوستان زحمت کد رو کشیده بودن و انصافا بهتر از اون ندیده بودم. و این بود که به دنبال توابع STL به دوتا تابع رسیدم
std::fill
و
std::fill_n
هر دو از کتابخانه algorithm استفاده میکنند و
std::fill
از c++ 17 معرفی شده و اگر کسی از ورژن های پایینتر استفاده میکنه به کار نمیاد و به اینصورت کار میکنه:
std::fill(word.begin()+a, word.begin()+b, ‘c’);
از درایه aم تا درایه (b-1)م استرینگمون رو به حرف c تغییر میده.
اگر کسی بخواد کل درایه هارو تغییر بده میتونه بنویسه
std::fill(word.begin(), word.end(), ‘c’);
هم ورودی اول و هم ورودی دوم از جنس ایتریتور هستند.
begin()
تابعی هست که به اولین عضو از آرایه یا استرینگ اشاره میکنه
end()
تابعی هست که به آخرین عضو از آرایه یا استرینگ اشاره میکنه
————————————————-
std::fill_n
از c++ 11 معرفی شده و همون کار بالارو انجام میده ولی به صورت
std::fill_n(word.begin()+a, b, ‘c’);
انجام میشه. ورودی اول از جنس ایتریتور و «ورودی دوم فقط تعداد حروف دریافت میشه».
نکته مهم اینکه اگر از تابع fill_n برای تغییر کل درایه ها استفاده میکنید باید بنویسید:
std::fill_n(word.begin(), word.size(), ‘c’);
—————————————-
حالا به عنوان جواب سوال، باید بگم که
یک حلقه مینویسیم که به تعداد n تکرار بشه
و درون حلقه برای اینکه در هر قدم تمام حروف از اول تا حرف iم تغییر کنند و حرف iم رو دریافت کنند مینویسیم:
for(int i{}; i<n; i++){
std::fill_n(word.begin()+0, i, word[i]);
std::cout << word << “\n”;
}
word.at(i)
همون کار word[i] رو انجام میده ولی safe تر هستش و اجازه دسترسی به خانه ای از حافظه خارج از چیزی که تعریف کردیم رو به ما نمیده.
مثلا
std::string word{“azade”};
word[4] -> e
و اگر بخوایم به word[5] دسترسی داشته باشم اینکار رو انجام میده، در صورتی که اشتباهه
ولی word.at(5) قطعا ارور میده و به شما میگه که به یک آدرس غیرمجاز دسترسی خواستید
🟢لطفا سوالات، نظرات و کدهای خود را برای ما کامنت یا داخل گروه ارسال کنید.
توضیحات توسط جناب : S1N4M
سوال گفته یه کد بنویسید که به ازای هر کلمه n حرفی, nتا کلمه چاپ بشه و در هر قدم از اندیس i به قبل، همه حروف برابر همون حرف iم از کلمه بشن.
یه کاری که میشه انجام داد
for (int j=0; j < i; j++)
word[j] = word[i];
که یکی از دوستان زحمت کد رو کشیده بودن و انصافا بهتر از اون ندیده بودم. و این بود که به دنبال توابع STL به دوتا تابع رسیدم
std::fill
و
std::fill_n
هر دو از کتابخانه algorithm استفاده میکنند و
std::fill
از c++ 17 معرفی شده و اگر کسی از ورژن های پایینتر استفاده میکنه به کار نمیاد و به اینصورت کار میکنه:
std::fill(word.begin()+a, word.begin()+b, ‘c’);
از درایه aم تا درایه (b-1)م استرینگمون رو به حرف c تغییر میده.
اگر کسی بخواد کل درایه هارو تغییر بده میتونه بنویسه
std::fill(word.begin(), word.end(), ‘c’);
هم ورودی اول و هم ورودی دوم از جنس ایتریتور هستند.
begin()
تابعی هست که به اولین عضو از آرایه یا استرینگ اشاره میکنه
end()
تابعی هست که به آخرین عضو از آرایه یا استرینگ اشاره میکنه
————————————————-
std::fill_n
از c++ 11 معرفی شده و همون کار بالارو انجام میده ولی به صورت
std::fill_n(word.begin()+a, b, ‘c’);
انجام میشه. ورودی اول از جنس ایتریتور و «ورودی دوم فقط تعداد حروف دریافت میشه».
نکته مهم اینکه اگر از تابع fill_n برای تغییر کل درایه ها استفاده میکنید باید بنویسید:
std::fill_n(word.begin(), word.size(), ‘c’);
—————————————-
حالا به عنوان جواب سوال، باید بگم که
یک حلقه مینویسیم که به تعداد n تکرار بشه
و درون حلقه برای اینکه در هر قدم تمام حروف از اول تا حرف iم تغییر کنند و حرف iم رو دریافت کنند مینویسیم:
for(int i{}; i<n; i++){
std::fill_n(word.begin()+0, i, word[i]);
std::cout << word << “\n”;
}
word.at(i)
همون کار word[i] رو انجام میده ولی safe تر هستش و اجازه دسترسی به خانه ای از حافظه خارج از چیزی که تعریف کردیم رو به ما نمیده.
مثلا
std::string word{“azade”};
word[4] -> e
و اگر بخوایم به word[5] دسترسی داشته باشم اینکار رو انجام میده، در صورتی که اشتباهه
ولی word.at(5) قطعا ارور میده و به شما میگه که به یک آدرس غیرمجاز دسترسی خواستید
🟢لطفا سوالات، نظرات و کدهای خود را برای ما کامنت یا داخل گروه ارسال کنید.