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.0257 sec