CPP Syntax for Competitive Programming
อ้างอิงจาก C++ Language Tutorial และประสบการณ์ส่วนตัว
Bare Minimum
Code Template
#include <bits/stdc++.h>
using namespace std;
int main() {
return 0;
}
bits/stdc++.h
เป็น library ที่นิยมใช้กันในการเขียนโปรแกรมเชิงแข่งขันเพื่อความสะดวกusing namespace std
ใช้เพื่อความสะดวกเวลาใช้คำสั่งต่าง ๆ เช่น- เดิมจะต้องเขียน
std::cout << "Hello World!";
ในการแสดงผลคำว่าHello World!
- ถ้ามีบรรทัด
using namespace std
แล้วจะไม่ต้องพิมพ์std::
นำหน้า - ก็คือจะสั้นลงเหลือ
cout << "Hello World!;
- เดิมจะต้องเขียน
Comments
// line comment
/*
block
comment
*/
Variables Data Types
ในภาษา C++ จำเป็นจะต้องประกาศ “ชนิด” ของตัวแปรเสมอ (ต่างจาก Python)
ชนิดที่พบบ่อยคือ
ชนิด | Size (byte)* | |
---|---|---|
bool |
1 | ค่าความจริง true, false (0-1) |
char |
2 | ตัวอักษร |
int |
4 | จำนวนเต็ม |
long long |
8 | จำนวนเต็มเหมือนกัน แต่เก็บค่าได้มากกว่า |
float |
4 | จำนวนจริง |
double |
8 | จำนวนจริงเหมือนกัน แต่เก็บค่าได้มากกว่า |
สาเหตุที่มีชนิดเดียวกันที่เก็บค่าได้แตกต่างกันเพราะการจองพื้นที่ memory ขนาดไม่เท่ากัน
Input/Output
ใช้ cin
ในการรับค่า โดยที่ cin
จะดูชนิดของตัวแปรให้ตอนที่รับค่า
#include <bits/stdc++.h>
using namespace std;
int main() {
int a;
cin >> a;
return 0;
}
หากพิมพ์ 5
หลังจากรันโปรแกรมแล้ว a
จะมีค่าเท่ากับ 5 ที่เป็น integer
ถ้า
#include <bits/stdc++.h>
using namespace std;
int main() {
char a;
cin >> a;
return 0;
}
แล้วพิมพ์ 5
หลังจากรันโปรแกรมแล้ว a
จะมีค่าเท่ากับ ‘5’ ที่เป็น character
ตัวอย่างเช่น
#include <bits/stdc++.h>
using namespace std;
int main() {
char a;
int b;
cin >> a >> b;
int c = a;
cout << c << " " << b;
return 0;
}
แล้วพิมพ์ 5 5
จะได้ผลลัพธ์เป็น 53 5
เนื่องจาก character ‘5’ มีค่า ascii เป็น 53
(ถูกแปลงค่า)
'\n'
เป็น special character ที่ใช้สำหรับขึ้นบรรทัดใหม่ในการแสดงผล
เช่น
#include <bits/stdc++.h>
using namespace std;
int main() {
char a;
int b;
cin >> a >> b;
int c = a;
cout << c << "\n" << b;
return 0;
}
แล้วพิมพ์ 5 5
จะได้ผลลัพธ์เป็น
53
5
สังเกตว่า
cout
ต้องใช้เป็นท่อน ๆ คือส่ง<<
ได้ทีละตัวแปรหรือทีละ string เท่านั้น
เช่นเดียวกัน
cin
ที่ใช้เป็นท่อน ๆ คือรับ>>
เข้าทีละตัวแปร โดยตัด input ตามประเภทตัวแปร
Control Structures
condition
- if-else if-else
if (x > 0)
cout << "x is positive";
else if (x < 0)
cout << "x is negative";
else
cout << "x is 0";
loop
- while
int i = 0;
while (i < 10) {
cout << i << " ";
i++;
}
- for
for (int i = 0; i < 10; i++) {
cout << i << " ";
}
Arrays
ใน C++ นั้นตัวแปรทุกชนิดสามารถทำเป็นตัวแปรชุด (Array) ได้ด้วยการใส่วงเล็บ []
ด้านหลังชื่อตัวแปร เช่น
จาก int a
เป็นการประกาศตัวแปรที่เป็นจำนวนเต็มหนึ่งจำนวน
สามารถเป็น int a[10]
เป็นการประกาศตัวแปรที่เป็นจำนวนเต็ม 10
จำนวน โดยจะเรียกสมาชิกได้ เช่น
a[0]
เป็นการเรียกสมาชิกตัวแรกใน array นั้น
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
int a[20];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
return 0;
}
ตัวอย่างด้านบนจะเป็นการรับค่า n
เพื่อที่จะรับจำนวนเต็มต่ออีก จำนวน (ใช้ต่อในเงื่อนไขของ for loop)
จากนั้นรับค่าเข้าสู่ a[i]
ไปเรื่อย ๆ โดย
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
int a[20];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int sm = 0;
for (int i = 0; i < n; i++) {
sm += a[i];
}
cout << sm;
return 0;
}
ตัวอย่างด้านบนเป็นการนำค่าที่รับเข้ามาไปใช้หาผลรวมต่อในตัวแปร sm
Strings
ใน C++ มี string
ให้ใช้ใน STL ซึ่งถูกรวมอยู่ใน bits/stdc++.h
แล้ว
จากที่ภาษา C ธรรมดาจะต้องใช้เป็น array of characters จึงสะดวกขึ้นเยอะ
#include <bits/stdc++.h>
using namespace std;
int main() {
string a;
cin >> a;
cout << a;
return 0;
}
ตัวอย่างด้านบนเป็นการรับค่า string แล้วส่งออกเลย
Functions
#include <bits/stdc++.h>
using namespace std;
int addint(int a, int b) {
return a + b;
}
int main() {
cout << addint(1, 4);
return 0;
}
ตัวอย่างด้านบนเป็นการสร้างฟังก์ชัน โดยให้ชื่อว่า addint
พร้อมตัวอย่างการเรียกใช้
Array หลายมิติ
#include <bits/stdc++.h>
using namespace std;
int main() {
int a[5][5];
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
return 0;
}