U E D R , A S I H C RSS

STL/vector/Cook Book

ž‘„ž : ["Lovelyboy^_^"]

๋ฒก„ฐ๋ฅผ ‚ฌšฉ•ด๋ณดธฐ œ„•œ ธฐ๋ณธ …‹Œ…(•žœผ๋กœ Žธ˜ƒ ๋ฐ˜๋ง๋กœ •ฉ๋‹ˆ๋‹ค.)

~cpp 
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	return 0;
}

  • ๋ช‡ ๋ฒˆ จ๋ณธฒฐณผ vector๋ฅผ ฐ€žฅ žฃผ “ฐฒŒ ๋œ‹ค. vector๋งŒ ๋ฐฐ›Œ ๋†“œผ๋ฉด list๋‚˜ dequeฐ™€ฒƒ€ ๋˜‘ฐ™“ธˆ˜ žˆ๋‹ค. vector๋ฅผ “ฐธฐ œ„•œ vector —ค๋”๋ฅผ ฌ•‹œœ˜••œ‹ค. STL„ “ธ๋ผ๋ฉด #include <iostream.h> ด๋ ‡ฒŒ “ฐ๋ฉด €ฐฎ๋‹ค. ๋‚˜‘— std::cout, std:vector ด๋Ÿฐ ‚ฝงˆ„ •˜••œ‹ค. ด๋ ‡ฒŒ •˜ธฐ ‹œผ๋ฉด ฑ “ฐ๋˜๋Œ€๋กœ using namespace std ฑฐ จฃผž.

int˜• ๋ฐฐ—ด„ int˜• ๋ฒก„— ๋ณต‚ฌ•ด ๋ณดž.

~cpp 
#include <iostream>
#include <vector>
using namespace std;

typedef vector<int>::iterator VIIT;	// Object˜•ด๋ผ๋ฉด typedef vector<Object>::iterator VOIT;

int main()
{
	int ar[10] = {45,12,76,43,75,32,85,32,19,98};	// Object˜•ด๋ผ๋ฉด Object ar[10]={...};

	vector<int> v(&ar[0], &ar[10]);		
		// Object˜•ด๋ผ๋ฉด vector<Object> v(...);
		// ar๋ฐฐ—ด˜ 0๋ฒˆ ›†Œ๋ถ€„ฐ 9๋ฒˆ›†ŒนŒง€๋ฅผ
		// v๋ฒก„—๋‹ฐ€ ๋ณต‚ฌ [0,10) ˜Œ—” ตฌ„
		// ๋งˆง€๋ง‰—” œตฌ„ด๋ผ๋Š”ฑฐ ๋ช…‹ฌ!

	for(VIIT it = v.begin() ; it != v.end(); ++it)	//  œ๋Œ€๋กœ ๋ณต‚ฌ๋๋‚˜ ฒฐณผ ๋ณดธฐ
		cout << *it << endl;

	return 0;
}

  • typedefœผ๋กœ ‹œž‘•˜๋Š” ๋ถ€๋ถ„๋ถ€„ฐ ๋ณดž. ผ๋‹จ ๋ฐ˜๋ณตž๋ผ๋Š” œ๋…„ •Œ•„•ผ ๋˜๋Š”๋ฐ, ‚ฌ‹€ ๋‚˜๋„ ž˜ ๋ชจ๋ฅธ๋‹ค.; ˜Œ ๋ฐฐšธ๋• ธ๋ƒฅ ข…˜ ฌ„ฐ๋ผ๋Š” œ๋…œผ๋กœ ๋ณด๋ฉด ๋œ‹ค. vector<int>::iterator •˜๋ฉด int˜• vector—  €žฅ๋˜–ด žˆ๋Š” ฐ’„ ˆœšŒ•˜ธฐ œ„•œ ๋ฐ˜๋ณตžด๋‹ค. ๋น„Š•˜ฒŒ vector<Object>>::iterator •˜๋ฉด Object˜• vector—  €žฅ๋˜–ด žˆ๋Š” ฐ’„ ˆœšŒ•˜ธฐ œ„•œ ๋ฐ˜๋ณตž ง€ ๋ญ; „‹•˜ฒŒ „—ฌ“ธ๋  typedef•ฃผ๋Š” ฒƒด๋‹ค. •˜ธฐ ‹œผ๋ฉด •ˆ•˜๋„ ๋œ‹ค.--;
  • ‹Œ—” vector<int> v~~ ด๋ถ€๋ถ„„ ๋ณดž. vector<T> —๋Š” ƒ„žฐ€ —ฌ๋Ÿฟ žˆ๋‹ค. ‘˜ •˜๋‚˜๋กœ, ๋ฐฐ—ด„ ๋ณต‚ฌ•˜๋Š” ƒ„ž๋ฅผ จ๋ณดž. ธ๋ƒฅ “ฐ๋Š”๋ฒ•๋งŒ ๋ณดž. ๋‹ˆœžˆ ๋ฐฐ—ด ๋ณต‚ฌ•˜๋Š” ฑฐ๋‹ค. C++ ณต๋ถ€–ˆ๋‹ค๋ฉด „•ˆ๋‹น 10žฅฐ€ 11žฅ— ๋ณต‚ฌ ƒ„ž๋  ๋‚˜˜ฒƒด๋‹ค. ฑฐ๋‹ค.; ธ๋ƒฅ 2๋ฒˆ ›†Œ—„œ 5๋ฒˆ›†ŒนŒง€ ๋ณต‚ฌ•˜  ‹ถ๋‹ค. •˜๋ฉด vector<int> v(&ar2, &ar6) ด๋ ‡ฒŒ •˜๋ฉด ๋˜ ง€?(–ดงธ ข€ ฑฐ๋งŒ•ด ๋ณดธ๋‹ค.;) ๋งˆง€๋ง‰€ œตฌ„ด๋ผ๋Š”ฑธ ๋ช…‹•˜ธฐ ๋ฐ”๋ž€๋‹ค.
  • for ๋ถ€๋ถ„„ ๋ณด๋ฉด •ž—„œ typedef •ค€ VIIT ˜•œผ๋กœ ˆœšŒ•˜  žˆ๋Š”ฒƒ„ ๋ณผˆ˜ žˆ๋‹ค. vector<T>˜ ๋ฉค๋ฒ„—๋Š” —ด๋ผ ๋งŽ€ ๋ฉค๋ฒ„•ˆ˜ฐ€ žˆ๋‹ค. ‘— begin() € ๋งจ ˜Œ œ„˜๋ฅผ ฐ€๋ฅด‚ค๋Š” ๋ฐ˜๋ณตž๋ฅผ ๋ฆฌ„•ค€๋‹ค. ๋‹—ฐžˆ end()๋Š” ๋งจ ๋ œ„˜๋ฅผ ฐ€๋ฅด‚ค๋Š” ๋ฐ˜๋ณตž๋ฅผ ๋ฆฌ„•ฃผ๋Š” ฑฐ๋  ƒฐ•˜ ง€๋งŒ •„‹ˆ๋‹ค.--;  •™••˜ฒŒ๋Š” '๋งจ ๋œ„˜๋ฅผ ฐ€๋ฅด‚ค๋Š” ๋ถ€๋ถ„—„œ •œ นธ ๋”„ ๋ฐ˜๋ณตž๋ฅผ ๋ฆฌ„ด'•ฃผ๋Š” ฑฐ๋‹ค. ™œ ธ๋ ‡ฒŒ ๋งŒ๋“ค—ˆ๋Š”ง€๋Š” ๋‚˜•œ…Œ ๋ฌปง€ ๋ง๋ผ. •„นŒ ๋ฐ˜๋ณตž๋Š” ฌ„ฐ๋  ƒฐ•˜–ˆ๋‹ค. —ญ‹œ ฌ„ฐ€ ฐ€๋ฅด‚ค๋Š” ฐ’„ ๋ณด๋ ค๋ฉด ๋‹—ฐžˆ •ž— * „ ๋ถ™—ฌ• ง€.

๋ฒก„ฐ๋กœ ๋™  ๋ฐฐ—ด “ฐธฐ

  • •„๋งˆ ดˆ๋ณดž๋•Œ ๋ˆ„ตฌ๋‚˜ •˜๋Š” ‹ˆ˜ฐ€ žˆ„ ฒƒด๋‹ค. ๋ณธธ๋„ ธ๋žฌ๋‹ค.--;
  • ˜ˆ œ๋กœ ˆซž๋ฅผ ๋ช‡œ ž…๋ ฅ๋ฐ›๋‚˜ ฐฏˆ˜๋ฅผ ž…๋ ฅ๋ฐ›€ ๋งŒผ, ธ๋งŒผ ๋ฃจ”„๋ฅผ ๋Œ๋ „œ ˆซž๋ฅผ ž…๋ ฅ๋ฐ›๋Š” ฑธ ๋ณดž.

~cpp 
#include <iostream>
using namespace std;

int main()
{
	int num;
	cin >> num;

	int ar[num];

	for(int i = 0 ; i < num ; ++i)
	{
		cout << i+1 << "๋ฒˆใ…คใ…‰ใ…’ใ…ค" << endl;	
		cin >> ar[i];
	}
	return 0;
}
  • ž –ด๋””ฐ€ ‹€๋ „นŒ? ณต๋ถ€ ข€ –ˆœผ๋ฉด ๋ˆ„ตฌ๋‚˜ •Œˆ˜ žˆ๋Š” ‚ฝงˆง€๋งŒ, c++ ๋ฐฐšดง€ ๋ช‡ฃผ๋ฐ–— •ˆ๋˜—ˆ—ˆ๋˜ ๋‚˜๋กœ„œ๋Š”  €ฒŒ ™œ ‹€๋ ธ๋Š”ง€ •Œˆ˜ฐ€ —†—ˆ๋‹ค.
  • ›€ ฑฐ๋‹ค.  •  ๋ฐฐ—ด€ ปดŒŒ‹œ— ฌธฐ๋ฅผ žก๋Š”๋‹ค. ž…๋ ฅ๋ฐ›๋Š” ๋ถ€๋ถ„€ ปดŒŒผ ๋๋‚˜  ‹–‰• •Œ ฌธฐ๋ฅผ ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ปดŒŒผ๋Ÿฌ๋Š” ๋‹—ฐžˆ ฌธฐ๋ฅผ •Œˆ˜ —†œผ๋‹ˆ —๋Ÿฌฐ€ ๋‚˜ฒŒ๋œ‹ค.  ณ ๋ณดž.

~cpp 
#include <iostream>
using namespace std;

int main()
{
	int num;
	cin >> num;

	int* ar = new int[num];

	for(int i = 0 ; i < num ; ++i)
	{
		cout << i+1 << "๋ฒˆใ…คใ…‰ใ…’ใ…ค : ";	
		cin >> ar[i];
	}
	
	delete [] ar;

	return 0;
}
  • šฐ๋ฆฌฐ€ —ฌƒœนŒง€ ๋ฐฐšด ฑฐ๋งŒ จ๋ณด๋ฉด ด๋ ‡ฒŒ   ˆ˜ žˆ๋‹ค. œ ๋ช…-_-•œ ๋™ ๋ฐฐ—ดด๋‹ค.--; •„.. delete []  €ฑฐ ๋ณดธฐ ‹ง€ •Š€ฐ€? c™€ c++˜  งˆ ธ ๋ฌธ œ ด ๋ฐ”๋กœ  €ฑฐ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ด€๋ฆฌ๋ฅผ ”„๋กœธ๋ž˜๋จธฐ€ •˜••œ‹ค๋Š”ฑฐ.. ž๋ฐ” ฐ™€ฑด ง€ฐ€ •Œ•„„œ delete •ฃผง€๋งŒ.. c๋‚˜ c++—„œ delete •ˆ•ฃผ๋ฉด.. X๋˜๋Š” ผด„ ๋ณผˆ˜ žˆ๋‹ค. (๋ณธ•œ๋ฒˆ ฒฝ—˜•ด ๋ดค๋‹ค.) ธ๋ž˜„œ ž˜ ๋””žธ๋œ ด๋ž˜Šค๋Š” ด๋ž˜Šค ๋‚ด—„œ •Œ•„„œ —†• ˜••œ‹ค. ๋ฐ”๋กœ vector๋ฅผ “ฐ๋ฉด  € ง“„ •ˆ•˜๋„ ๋œ‹ค. ๋˜  ณ๋ณดž.

~cpp 
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	int num;
	cin >> num;

	vector<int> ar(num);

	for(int i = 0 ; i < ar.size() ; ++i)
	{
		cout << i+1 << "๋ฒˆใ…คใ…‰ใ…’ใ…ค : ";	
		cin >> ar[i];
	}

	return 0;
}

  • vector<int>... ๋ถ€๋ถ„„ ๋ณด๋ฉด ๋˜ ๋‹ค๋ฅธ ƒ„žฐ€ ๋ณดธ๋‹ค. ž๋กœ ˆซž •˜๋‚˜๋ฅผ ๋ฐ›๋Š”๋‹ค. ธ ๋งŒผ ๋™  • ‹•ค€๋‹ค๋Š” ๋œด๋‹ค. delete? ธ๋”ดฑฐ •ˆ•˜๋„ ๋œ‹ค. ”„๋กœธ๋žจ ๋๋‚˜๋ฉด„œ int˜• ๋ฒก„ฐ ar†Œ๋ฉธ๋˜๋ฉด„œ •Œ•„„œ —†• ค€๋‹ค.
  • ˜ •˜๋‚˜ ‚ดŽด๋ณผฒŒ žˆ๋‹ค. •„นŒ ˜ˆ œ—„œ๋Š” ๋ฐ˜๋ณตž๋กœ ๋ฒก„ฐ ๋‚ด๋ถ€๋ฅผ ˆœšŒ–ˆ—ˆ๋‹ค. •˜ง€๋งŒ ๋ฒก„ฐ๋Š” ž„˜ ‘„ —ˆšฉ•œ‹ค. ๋ฐฐ—ด˜๋Ÿผ ar4 ด๋Ÿฐ‹œผ๋กœ “ธˆ˜ žˆ๋‹จ ๋งด๋‹ค. Žธ•œ๋Œ€๋กœ จฃผž.

๋ฒก„ฐ๋กœ 2ฐจ› ๋™  ๋ฐฐ—ด “ฐธฐ

  • ๋ฐ๋ธ”Šค  ”„•Œ œ ๋ช…•„ 2ฐจ› ๋™  ๋ฐฐ—ด “ฐธฐ๋‹ค.
  • ŒŒŠคนผ ‚ผฐ˜• ˆ™ œ• •Œ ๋ฐ๋ธŒ”ผ•„—„œ “ฐ๋Š”๋ฒ• ๋ฐฐ›Œ„œ —ด‹žˆ “ฐ๋‹ฐ€ ๋ฐ๋ธ”Šค  ”„•Œ žฌ๋™ฐ€ ผ๋œจ๋ ธ๋‹ค. 1•™ธฐ ๋‚ด๋‚ด Žธ•„œ ‹‹  จ๋Œ”๋Š”๋ฐ.. ง€ธˆ ๋ณด๋ฉด ๋‚ดฐ€  €ฑธ ™œ “ฐ  žˆ—ˆ„นŒ •˜๋Š” ƒฐด ๋“ ‹ค.
  • vector๋กœ „‹žˆ •ฒฐฐ€๋Šฅ•˜‹ค. See also RandomWalk2/Vector๋กœ2ฐจ›๋™ ๋ฐฐ—ด๋งŒ๋“คธฐ
  • resize() ๋ฉ”†Œ๋“œ๋Š” ๋ฒก„˜ ฌธฐ๋ฅผ ๋‹‹œ žก•„ฃผ๋Š” —ญ• „ •œ‹ค. ž˜ “ฐž

Pointer๋ฅผ  €žฅ•˜๋Š” Container

  • container — ฐ’ €žฅ๋ •Œ๋Š” ๋ณต‚ฌ ณผ •ˆ˜–‰๋œ‹ค. ธ๋ž˜„œ ฐ’„‹•œ int, double˜• — ๋Œ€•œ containter๋Š” ธ๋ ‡ฒŒ ๋ฌธ œฐ€ ๋˜ง€ •Š๋œ‹ค.
  • ๋ฉ˜ฐ€ ฐ ž๋ฃŒ˜•„ container—  €žฅ• •Œ ๋งˆ๋‹ค ๋ณต‚ฌฐ€ ˆ˜–‰๋œ‹ค๋ฉด, ๋งŽ€ ๋‚ญ๋น„ฐ€ ๋ฐœƒ•œ‹ค.
    • —ฌธฐ„œ žก๋‹•˜๋‚˜. ฒด๋ฅผ parameter๋กœ„˜ธธ๋•Œ๋„ ๋ณต‚ฌฐ€ ˆ˜–‰๋˜ง€ •Š๋Š” ฐธกฐ๋ฅผ ‚ฌšฉ•˜ž.
      ~cpp 
      Func(const Obj& obj) 
      
  • ธ๋ž˜„œ pointer๋งŒ„ šฉ•„œ  €žฅ•˜ž. •˜ง€๋งŒ “ธ๋ชจ —†๋Š” ฒด๋Š” šฐ๋ฆฌฐ€ ง€›Œ˜••œ‹ค. ฌ„ฐ๋ฅผ ๋„–ด„•Œ—๋Š”, ปจ…Œด๋„ˆฐ€ †Œ๋ฉธ๋ •Œ๋Š” ฌ„ฐ๋“ค€ ง€›Œง€ ง€๋งŒ. ฌ„ฐ๋“คฐ€๋ฅด‚ค๋Š” ฐ’๋“ค€ ง€›Œง€ง€ •Šธฐ ๋•Œ๋ฌธด๋‹ค.
  • ‹Œ ˜ˆ œ๋Š” pointer๋กœ ž๋ฃŒ๋ฅผ ๋„ , ง€šฐ๋Š” ˜ˆ œด๋‹ค.
    ~cpp 
     #include <iostream> 
    #include <string> 
    #include <vector> 
    using namespace std; 
    
    class Obj 
    { 
    private: 
    	int a; 
    	string c; 
    public: 
    	Obj(int n, const string& str) : a(n), c(str) {} 
    	void showMember() 
    	{ 
    		cout << a << " " 
    			<< c << endl; 
    	} 
    };
    typedef vector<Obj*>::iterator VOIT; 
    
    int main() 
    { 
    	vector<Obj*> v; // ฌ„ฐ๋ฅผ  €žฅ•˜๋Š” vector
    	
    	// ๋ฒก„— Objฒด๋“ค˜ ฌ„ฐ๋ฅผ ๋„ฃ๋Š”๋‹ค. 
    	v.push_back(new Obj(1, "ธธ๋™")); 
    	v.push_back(new Obj(3, "—ˆค€")); 
    	v.push_back(new Obj(5, " œ๋งˆ")); 
    	
    	// ˆœšŒ•˜๋ฉด„œ showMember ๋ฉ”†Œ๋“œ ˜œ•˜ 
    	for(VOIT it = v.begin() ; it != v.end() ; ++it)
    		(*it)->showMember();
    	
    	// ˆœšŒ•˜๋ฉด„œ ฐ€๋ฆฌ‚ค๋Š” ฐ’๋“ค„ ง€šด๋‹ค.
    	for(it = v.begin() ; it != v.end() ; ++it)
    		delete *it;
             v.clear();
    	return 0; 
    } 
    

•˜  ‹€ ๋ง

  •  . ๋ณ„๋ฃจ –ด๋ šดฑด —† ง€
  • ฒŒ  œฐ€ •Œ  žˆ๋Š” STL— ๋Œ€•œ ฒ๋‹ˆ๋‹ค. ๋‚˜๋จธง€๋‚˜ ๋” ž„žˆ •Œ  ‹œ‹ ๋ถ„€ ฑ…„ ๋ณด‹œ๋“ ง€..; MSDN„ ฐธ •˜„š”. ผ๋ฐ  •๋„๋งŒ •Œ•„๋„.. ™ ๋งŒ•œฑด ๋‹•ฉ๋‹ˆ๋‹ค. C++๋งŒ๋“  ด๋ฆ„ –ด๋ šด ‚ฌ๋žŒ BJar... Str...(;) ‚ฌ๋žŒ“ฐ  ‹€ ธฐ๋Šฅ๋งŒ “ฐ๋žฌฑฐ๋“ š”--; ž๋ฐ”ฐ€ “ฐธฐ๋Š” ‰ฌ›Œ๋„ —ญ‹œ ๋‚œ c++‹‹ค.
  • ๋…ธŒŒ‹—„œ ๋ง•˜๋Š” ฑด๋ฐ.. •ˆ˜๋กœ ฒด๋ฅผ ๋„˜ธธ๋•Œ๋Š” ผญ ฐธกฐ! ฐธกฐ! ž…๋‹ˆ๋‹ค. ฐ’•ˆ ๋ฐ”๋€Œ๋ฉด ผญ const จฃผ‹œตฌ—ฌ. ฐธกฐ •ˆ “ฐ  ฐ’ “ฐ๋ฉด –ด๋–ปฒŒ ๋˜๋Š”ง€ Ž™‹ฐ๋ธŒ C++— ž˜ ๋‚˜™€ žˆŠต๋‹ˆ๋‹ค.(ฑ… „  „  ˆ๋Œ€ •„‹˜) ๋ณต‚ฌ ƒ„ž๋ฅผ 10๋ฒˆ ๋„˜ฒŒ ˜œ•œ‹ค๋Š” ฑธ๋กœ ธฐ–ต•จ.
  • C++—„œ๋Š” ตฌกฐฒด—„œ๋„ ƒ„žฐ€ ๋˜๋”ตฐš”.--;
    • ตฌกฐฒด—„œ •ˆ˜—ญ‹œ ฐ€๋Šฅ•˜ , constructor, destructor—ญ‹œ ฐ€๋Šฅ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ class™€ ฐจ € ƒ†•ˆ๋˜ , ๋‚ด๋ถ€ •„๋“œ๋“คด publicœผ๋กœ ๋˜–ด žˆŠต๋‹ˆ๋‹ค. ƒ†•ˆ๋˜„œ ŒŒƒ•˜๋Š” ๋ถ„ œ๋“ค— ด€•„œ๋Š” •™ต C++ต œ ƒ† ๋ถ€๋ถ„ณผ virtual •ˆ˜ ด€๋ จ ๋ถ€๋ถ„˜ ๋™  ๋ฐ”ธ๋”ฉ ๋ถ€๋ถ„„ ฐธ  •˜‹œธฐ ๋ฐ”๋žŒ๋‹ˆ๋‹ค.--ƒ๋ฏผ
  • ธ€ตฌ.. š”ฒƒ๋„ ๋ณ„ฑฐ •„‹Œ Œธด •œ๋ฐ.. i++ณผ ++i˜ ฐจ € ๋‹•„‹œ ? ผ๋ฐ นดšดŠธ•˜ฑฐ๋‚˜ ๋ฃจ”„๋ฅผ ๋Œ๋•Œ๋Š” ฐจฐ€ —†๋‹  ๋ด๋„ ‹Šต๋‹ˆ๋‹ค. ++iฐ€ i++๋ณด๋‹„ฑ๋Šฅ‹‹  •˜„š”.(see also i++VS++i ฑด ๋ญ..~ ๋ง˜๋Œ€๋กœ •˜„š”^^
  • 02 —ฌ๋Ÿฌ๋ถ„ c++ณต๋ถ€ —ด‹žˆ •š”~
----
STL/vector
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:27:58
Processing time 0.0254 sec