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