[C++] ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น | new delete | ๊ฐ์ฒด ๋์ ์์ฑ
- -
๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
์ ์ ํ ๋น
๋ณ์ ์ ์ธ์ ํตํด ํ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
๋์ ํ ๋น
ํ์ํ ์์ด ์์ธก๋์ง ์๋ ๊ฒฝ์ฐ. ํ๋ก๊ทธ๋จ ์์ฑ์ ํ ๋น ๋ฐ์ ์ ์์
์คํ์ค์ ํ ๋ฉ๋ชจ๋ฆฌ์์ ํ ๋น
-> ํ์ผ๋ก๋ถํฐ ํ ๋น ๋ฐ๋๋ค.
C ์ธ์ด์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
ํ ๋น : malloc
ํด์ : free
์ ๋๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
C++์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น/ ๋ฐํ
new ์ฐ์ฐ์
๊ธฐ๋ณธํ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ๋ฐฐ์ด ํ ๋น, ๊ฐ์ฒด ํ ๋น, ๊ฐ์ฒด๋ฐฐ์ด ํ ๋น
๊ฐ์ฒด์ ๋์ ์์ฑ - ํ ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ฒญ
๊ฐ์ฒดํ ๋น์ ์์ฑ์ ํธ์ถ
delete ์ฐ์ฐ์
new๋ก ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฐํ
๊ฐ์ฒด์ ๋์ ์๋ฉธ - ์๋ฉธ์ ํธ์ถ ๋ค ๊ฐ์ฒด๋ฅผ ํ์ ๋ฐํํ๋ค.
+ ๋ฉ๋ชจ๋ฆฌ
1. ์ฝ๋์์ญ : ์ฝ๋
2. ๋ฐ์ดํฐ ์์ญ: ์ ์ญ๋ณ์, static ๋ณ์( ํ๋ก๊ทธ๋จ ์์์ ํ ๋น, ํ๋ก๊ทธ๋จ ์ข ๋ฃ์ ์๋ฉธ)
3. ํ(heap)์์ญ : ๋์ ํ ๋น์์ญ(new๋ก ํ ๋น, delete ๋ก ํด์ )
4. ์คํ(stack) ์์ญ : ๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์(ํด๋น ํจ์ ์คํ ์ ํ ๋น, ํจ์ ์ข ๋ฃ ์ ํด์ )
๋ณ์์ ํด๋์ค ๋ฐฐ์ด ๋ฑ์ stack ์์ญ(์ ์ ํ ๋น, ์ปดํ์ผ์์ ํ ๋น)
๋์ ํ ๋น์ ๋ฐ(์คํ)์์ ํ ๋นํ๊ณ ์ง์ ์ ๊ทผ ๋ถ๊ฐ.
๊ทธ๋ฌ๋ฏ๋ก ์คํ์์ญ์ ํฌ์ธํฐ ๋ณ์๋ฅผ ๋ง๋ค์ด ๋๊ณ ์ ๊ทผํ๋ค.
new ์ delete ์ฐ์ฐ์
C++ ์ ๊ธฐ๋ณธ ์ฐ์ฐ์์ด๋ค.
new/delete ์ฐ์ฐ์ ์ฌ์ฉํ์
new
๋ฐ์ดํฐํ์ *ํฌ์ธํฐ๋ณ์ = new ๋ฐ์ดํฐ ํ์ ;
delete
delete ํฌ์ธํฐ๋ณ์
new/delete์ ์ฌ์ฉ
int *plnt = new int;
delete pInt;
C++ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์
#include <iostream>
#include <string>
using namespace std;
int main() {
int* p;
p = new int[5];
int n;
if (!p) {
cout << "๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ถ๊ฐ";
return 0;
}
for (int i = 0; i < 5; i++) {
p[i] = i+1;
n = p[i];
cout << "*p = " << p[i] << '\n';
cout << "n = " << n << '\n';
}
delete []p;
}
์๋์ ๊ฐ์ด ํ์ฉํ ์ ์๋ค.
int main() {
cout << "์
๋ ฅํ ์ ์ ๊ฐ์? : ";
int n;
cin >> n; // ์ ์ ๊ฐ์ ์
๋ ฅ
if (n <= 0) return 0;
int* p = new int[n];
if (!p) {
cout << "๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ถ๊ฐ";
return 0;
}
for (int i = 0; i < n; i++) {
cout << i + 1 << "๋ฒ์งธ ์ ์ : " ;
cin >> p[i];
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum += p[i];
}
cout << "ํ๊ท : " << sum / n << endl;
delete []p;
}
๊ฐ์ฒด์ ๋์ ์์ฑ ๋ฐ ๋ฐํ ํ์
๋์ ํ ๋น
ํด๋์ค์ด๋ฆ *ํฌ์ธํฐ๋ณ์ = new ํด๋์ค ์ด๋ฆ;
ํด๋์ค์ด๋ฆ * ํฌ์ธํฐ๋ณ์ = new ํด๋์ค ์ด๋ฆ(์์ฑ์๋งค๊ฐ๋ณ์๋ฆฌ์คํธ);
ํด์
delete ํฌ์ธํฐ๋ณ์;
๊ฐ์ฒด ๋์ ์์ฑ ์์
์์ ๊ฐ์๋ฅผ ์ ๋ ฅ๋ฐ๊ณ Circle ๋ฐฐ์ด์ ๋์ ์์ฑํ๋ผ.
๋ฐ์ง๋ฆ ๊ฐ์ ์ ๋ ฅ๋ฐ์ Circle ๋ฐฐ์ด์ ์ ์ฅํ๊ณ , ๋ฉด์ ์ด 100์์ 200 ์ฌ์ด์ธ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ผ.
#include <iostream>
#include <string>
using namespace std;
class Circle {
int radius;
public:
Circle();
~Circle() {};
void setRadius(int r) { radius = r; };
double getArea() { return 3.14 * radius * radius; };
};
Circle::Circle() {
radius = 1;
}
int main() {
cout << "์์ฑํ๊ณ ์ ํ๋ ์์ ๊ฐ์? : ";
int n, radius;
cin >> n; // ์์ ๊ฐ์ ์
๋ ฅ
Circle* pArray = new Circle[n]; //n๊ฐ์ Circle ๋ฐฐ์ด ์์ฑ
for (int i = 0; i < n; i++) {
cout << "์ " << i + 1 << ": ";
cin >> radius; //๋ฐ์ง๋ฆ ์
๋ ฅ
pArray[i].setRadius(radius);
}
int count = 0; //์นด์ดํธ ๋ณ์
Circle* p = pArray;
for (int i = 0; i < n; i++) {
cout << p->getArea()<<' '; //์์ ๋ฉด์ ์ถ๋ ฅ
if (p->getArea() >= 100 && p->getArea() <= 200) {
count++;
}
p++;
}
cout << endl << "๋ฉด์ ์ด 100์์ 200 ์ฌ์ด์ธ ์์ ๊ฐ์๋ " << count << endl;
delete []pArray;
}
find()
์ฐพ์ ๋ฌธ์์ด๊ณผ ์ด๋์๋ถํฐ ์ฐพ์ ๊ฒ์ธ์ง์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์ธ์๋ก ๋ฐ๋ ํจ์์ด๋ค.
#include <iostream>
#include <string>
using namespace std;
int main() {
char c = 'A';
string str = "Apple pear";
int x = str.find("p", 0);
int y = str.find("p", 3);
cout << x << endl;
cout << y << endl;
return 0;
}
find ์ ํ์ฉ
#include <iostream>
#include <string>
using namespace std;
// ๋ฌธ์์ด์ ์
๋ ฅ๋ฐ์ ํน์ ๋ฌธ์๊ฐ ๋ช ๊ฐ ์๋์ง?
int main() {
char a;
string str4;
cout << "์์ด๋ก ๋ฌธ์ฅ์ ์
๋ ฅํ์ธ์ฌ >> ";
getline(cin, str4);
cout << "์ฐพ์ ๋ฌธ์๋ฅผ ์
๋ ฅํ์ธ์ฌ >> ";
cin >> a;
int startindex = 0;
int x = 0;
int count = 0;
while (true) {
x = str4.find(a, startindex);
if (x != -1) {
startindex=x+1;
++count;
}
else {
break;
}
}
cout << endl << "'" << a << "' ๋ฌธ์๋ " << count << "๊ฐ ์์ต๋๋ค.";
}
'Languages > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ์ค๋ณต ๊ฐ๋ฅ ๋ก๋, ์ค๋ณต ๋ถ๊ฐ๋ฅ ๋ก๋ ์ค์ต (0) | 2021.05.04 |
---|---|
[C++] ํจ์ ์ค๋ณต | ์๋ฉธ์ | ๋ํดํธ ๋งค๊ฒ ๋ณ์ (0) | 2021.05.04 |
[C++ ] ๊ฐ์ฒด ํฌ์ธํฐ | ํฌ์ธํฐ ๊ฐ์ฒด | ๊ฐ์ฒด ๋ฐฐ์ด ์์ (0) | 2021.04.06 |
[C++] Tic Tac Toe Game | ํฑํํ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ | ํฑํํ ๊ตฌํ (0) | 2021.03.24 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค