U E D R , A S I H C RSS

AcceleratedC++/Chapter5

1. Chapter 5 Using sequential containers and analyzing strings

  • ์—ฌํƒœ๊นŒ์ง€ vector๋ž‘ string ๊ฐ–๊ณ  ์ž˜ ๋†€์•˜๋‹ค. ์ด์ œ ์ด๊ฒƒ๋“ค์„ ๋„˜์–ด์„œ๋Š” ๊ฒƒ์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•˜๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ?ํ•จ์ˆ˜๋งŒ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ํŠผํŠผํ•œ ์•„ํ‚คํ…์ณ๋„ ๋ฐ˜์˜ํ•ด์ค€๋‹ค. ๋งˆ์น˜ vector์˜ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜๋ฉด, ๋‹ค๋ฅธ๊ฒƒ๋„ ์‰ฝ๊ฒŒ ๋ฐฐ์šธ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ฒ˜๋Ÿผ...

1.1. 5.1 Separating students into categories

  • f๋œฌ ํ•™์ƒ๊ณผ ์•„๋‹Œ ํ•™์ƒ์œผ๋กœ ๋‚˜๋ˆ  ๋ณด์ž.
    ~cpp 
    bool fgrade(const Student_info& s)
    {
    	return grade(s) < 60;
    }
    
    vector<Student_info> extract_fails(vector<Student_info>& students)
    {
    	vector<Student_info> pass, fail;
    	for(vector<Student_info>::size_type i = 0; i != students.size() ; ++i)
    	{
    		if(fgrade(students[i]))
    			fail.push_back(students[i]);
    		else
    			pass.push_back(students[i]);
    	}
    	students = pass;
    	return fail;
    }
     
  • ์ฐธ์กฐ๋กœ ๋„˜์–ด๊ฐ„ students์˜ ์ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ฝ์–ด๋“ค์—ฌ์„œ, 60 ์ดํ•˜๋ฉด fail ๋ฒกํ„ฐ์—, ์•„๋‹ˆ๋ฉด pass ๋ฒกํ„ฐ์— ๋„ฃ์€ ๋‹ค์Œ, students ๋ฒกํ„ฐ๋ฅผ pass๋ฒกํ„ฐ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  fail์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. ์ฆ‰ students์—๋Š” f ์•„๋‹Œ ํ•™์ƒ๋งŒ, ๋ฆฌํ„ด๋œ vector์—๋Š” f ๋œฌ ํ•™์ƒ๋งŒ ๋‚จ์•„์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ญ”๊ฐ€ ์ข€ ์‚๋ฆฌ๋ฆฌํ•˜๋‹ค. ๋” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๋“ฏํ•˜๋‹ค.

  • 1.1.1. 5.1.1 Erasing elements in place

  • ๊ทธ๋ ‡๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. for๋ฃจํ”„๊ฐ€ ๋๋‚ ๋•Œ์—๋Š” ์ค‘๋ณต๋˜๋Š” ๋‘๊ฐœ์˜ ๋ฒกํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ์“ธ ๋ฐฉ๋ฒ•์€ ๋งŒ์•ฝ f๋ฉด fail์— ์ถ”๊ฐ€ํ•˜๊ณ , f ์•„๋‹ˆ๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ ์ง€์šฐ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ˜๊ฐ‘๊ฒŒ๋„ ์ด๋Ÿฐ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค. ๊ทผ๋ฐ ์กธ๋ผ ๋А๋ฆฌ๋‹ค. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ์ปค์งˆ์ˆ˜๋ก ์„ฑ๋Šฅ ์ €ํ•˜๋Š” ๊ธ‰๊ฒฉํ•˜๋‹ค. ๋ฒกํ„ฐ์—์„œ๋Š” ์ค‘๊ฐ„์— ํ•˜๋‚˜๋ฅผ ์ง€์šฐ๋ฉด, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ†ต์งธ๋กœ ๋‹ค์‹œ ํ• ๋‹นํ•˜๊ณ , ์ง€์›Œ์ฃผ๋Š” ์ง“์„ ํ•ด์•ผํ•œ๋‹ค. O(n*n)์˜ ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋‹ค. ๋ฒกํ„ฐ๋Š” ์ž„์˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋Œ€์‹ , ์ค‘๊ฐ„ ์‚ฝ์ž…์ด๋‚˜ ์ค‘๊ฐ„ ์‚ญ์ œ์˜ ํผํฌ๋จผ์Šค๋ฅผ ํฌ๊ธฐํ•œ ๊ฒƒ์ด๋‹ค. ์ด์ œ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค.
  • ๋จผ์ € ๋А๋ฆฌ์ง€๋งŒ, ์ง๊ด€์ ์ธ ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์‚ดํŽด๋ณด์ž.
    ~cpp 
    vector<Student_info> extract_fails(vector<Student_info>& students)
    {
    	vector<Student_info> fail;
    	vector<Student_info>::size_type i = 0
    	while(i != students.size()) {
    		if(fgrade(students[i])) {
    			fail.push_back(students[i]);
    			students.erase(students.begin() + i);
    		} else
    			++i;
    	}
    	return fail;
    }
     
    • ์™œ students.erase(studentsi) ํ•˜์ง€ ์•Š๋Š”๊ฐ€? ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐ”๋กœ ๋ฐ˜๋ณต์ž๋ผ ๋ถˆ๋ฆฌ์šฐ๋Š” ๊ฒƒ์„ ์ด์šฉํ•ด, (ํฌ์ธํ„ฐ๋ณด๋‹ค ๋ฐ˜๋ณต์ž๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋„ค์š”.) ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ œ์–ด๋ฅผ ํ• ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
    • ๊ทธ๋ฆผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ๋ณต์‚ฌ ๊ฒ๋‚˜๊ฒŒ ํ•ด๋Œ„๋‹ค. ํ•˜๋‚˜ ์ง€์šธ๋•Œ๋งˆ๋‹ค ๊ทธ ๋’ค์— ์žˆ๋Š”๊ฑธ ๋‹ค ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ์— ๋ชจ๋‘ fail์ด๋ผ๋ฉด? ๋”์ฐํ•˜๋‹ค.
    • ๋˜ํ•œ, ์ง€์›Œ์คŒ์œผ๋กœ์จ ์ปจํ…Œ์ด๋„ˆ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€ํ•œ๋‹ค. ์ฆ‰ ๋ชจ๋“  ํ•™์ƒ์„ ๋‹ค ๊ฒ€์‚ฌํ•˜์ง€ ๋ชปํ• ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  • ~cpp 
    vector<Student_info> extract_fails(vector<Student_info>& students)
    {
    	vector<Student_info> fail;
    	vector<Student_info>::size_type i = 0;
             vector<Student_info>::size_type size = students.size();
    	while(i != size) {
    		if(fgrade(students[i])) {
    			fail.push_back(students[i]);
    			students.erase(students.begin() + i);
    		} else
    			++i;
    	}
    	return fail;
    }
     

    1.1.2. 5.1.2 Sequential versus random access

    • ์œ„์˜ ๋ฒกํ„ฐ๋Š” ์ž„์˜ ์ ‘๊ทผ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๊ทธ๋ƒฅ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ๋ฟ์ด๋‹ค. ์ž„์˜์ ‘๊ทผ์„ ํฌ๊ธฐํ•จ์œผ๋กœ์จ ์ƒ๊ธฐ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด๋“์ด ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ณด๋‹ค ๋จผ์ € ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ œ์–ดํ• ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฐ˜๋ณต์ž๋ผ๋Š” ๊ฒƒ์„ ๋จผ์ € ์‚ดํŽด๋ณด์ž.

    1.2. 5.2 Iterators

  • ์—ฌํƒœ๊ป ์ž˜์“ฐ๋˜ ๋ฒกํ„ฐํ˜• ๋ณ€์ˆ˜n์€ ๋ฒกํ„ฐ์˜ n๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋งํ•œ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ํ•˜๋˜๊ฑฐ ๋ณด๋ฉด ๋ฃจํ”„ ์•ˆ์—์„œ ++i ์ด๊ฑฐ๋ฐ–์— ์—†๋‹ค. ์ฆ‰ ์ˆœ์ฐจ์ ์œผ๋กœ๋งŒ ๋†€์•˜๋‹ค๋Š” ๋œป์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ์•Œ์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•Œ๊ธธ์ด ์—†๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฐ˜๋ณต์ž(Iterators)๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•„๋ณด์ž.
    • ์ปจํ…Œ์ด๋„ˆ์™€ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ์š”์†Œ๋ฅผ ํ™•์ธ
    • ๊ทธ ์š”์†Œ ์•ˆ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฐ’ ํ™•์ธ
    • ์ปจํ…Œ์ด๋„ˆ ์•ˆ์˜ ์š”์†Œ๋“ค ์‚ฌ์ด๋ฅผ ์™”๋‹ค๊ฐ”๋‹ค ํ• ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํšจ๊ณผ์ ์œผ๋กœ ๋‹ค๋ฃฐ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ๋งŒ์„ ๊ฐ€์ง€๊ณ  ๋†€๋„๋ก ์ œํ•œํ•˜๋Š” ๊ธฐ๋Šฅ
  • ์ธ์ˆ˜ๆ›ฐ : STL์„ ์‚ฌ์šฉํ• ๋•Œ์—๋Š” ๋ฐ˜๋ณต์ž๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํ‘œ์ค€์ด๋ผ ํ•œ๋‹ค.
  • ์ธ๋ฑ์Šค๋กœ ์ง  ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณต์ž๋กœ ์ง  ์ฝ”๋“œ๋กœ ๋ฐ”๊พผ ์˜ˆ
    ~cpp 
    for(vector<Student_info>::size_type i = 0 ; i != students.size() ; ++i)
    	cout << students[i].name << endl;		
     

    ~cpp 
    for(vector<Student_info>::const_iterator i = students.begin() ; i != students.end() ; ++i)
    	cout << (*i).name << endl;
     

  • ์ƒ์†Œํ•œ๊ฒŒ ๋ณด์ด์ง€ ์•Š๋Š”๊ฐ€? ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ž.

  • 1.2.1. 5.2.1 Iterator types

  • ํ‘œ์ค€ ์ปจํ…Œ์ด๋„ˆ์— ์ •์˜ ๋˜์–ด ์žˆ๋Š” ๋ฐ˜๋ณต์ž์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ ๋‘๊ฐ€์ง€๋‹ค.
    • const_iterator : ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค์ง€ ์•Š๊ณ  ์ˆœํšŒํ• ๋•Œ
    • iterator : ๊ทธ๋ƒฅ ์ˆœํšŒํ• ๋•Œ
  • ์„ธ๋ถ€์ ์ธ ๊ฑด ๋ชฐ๋ผ๋„ ๋œ๋‹ค.
  • ํ•„์š”์— ๋”ฐ๋ผ iterator์—์„œ const_iterator๋กœ ์บ์ŠคํŒ…๋œ๋‹ค. ๋ฐ˜๋Œ€๋Š” ์•ˆ๋œ๋‹ค.

  • 1.2.2. 5.2.2 Iterator Operations

  • begin()๊ณผ end()๋Š” ๊ฐ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ๋งจ ์ฒ˜์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž์™€, ๋งจ ๋งˆ์ง€๋ง‰์—์„œ ํ•œ์นธ ์ง€๋‚œ ๊ฒƒ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
  • ++i : ๊ทธ๋ƒฅ ์“ฐ๋ฉด ๋œ๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋งˆ๋‹ค ๊ตฌํ˜„์€ ๋‹ค๋ฅผํ…Œ์ง€๋งŒ, ๋†€๋ผ์šธ ์ •๋„์˜ ์ถ”์ƒํ™”๋กœ ์‚ฌ์šฉ์ž๋“ค๋กœ ํ•˜์—ฌ๊ธˆ ๋ชจ๋ฅด๊ณ  ์จ๋„ ๋˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ๋ฐ˜๋ณต์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.
  • '*' : ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž๋ผ ๋ถˆ๋ฆฌ์šด๋‹ค.
  • (*i).name : ๋ฐ˜๋ณต์ž i๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์š”์†Œ์˜ ๋ฉค๋ฒ„ name์„ ๋งํ•œ๋‹ค. ๊ด„ํ˜ธ๋ฅผ ๊ผญ ์จ์ฃผ์ž. ์šฐ์„ ์ˆœ์œ„๊ฐ€ .์ด *๋ณด๋‹ค ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋‚œ๋‹ค.

  • 1.2.3. 5.2.3 Some syntactic sugar

  • (*i).name ์ด๋ ‡๊ฒŒ ํ•˜๊ธฐ ๊ท€์ฐฎ๋‹ค. i->name ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.

  • 1.2.4. 5.2.4 The meaning of students.erase(students.begin() + i)

  • begin()์ด ๋งจ ์ฒ˜์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿผ i๋ฅผ ๋”ํ•˜๋ฉด? i๋ฒˆ쨰 ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๊ฐ€ ๋ฆฌํ„ด๋ ๊ฒƒ์ด๋‹ค.
  • ํ•˜์ง€๋งŒ ์ž„์˜ ์ ‘๊ทผ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ปจํ…Œ์ด๋„ˆ์—๋‹ค ์ €์ง“ํ•˜๋ฉด ์•ˆ๋œ๋‹ค. + ์—ฐ์‚ฐ์ž๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋œฌ๋‹ค.

  • 1.3. 5.3 Using iterators instead of indices

  • ์ธ๋ฑ์Šค ์“ฐ๋˜ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜๋ณต์ž๋กœ๋งŒ ๋ฐ”๊ฟ” ๋ณด์ž.
    ~cpp  
    vector<Students_Info> extract_fails(vector<Student_info>& students)
    {
    	vector<Student_info> fail;
    	vector<Student_info>::iterator iter = students.begin();
    	while(iter != students.end()) {
    		if(fgrade(*iter)) {
    			fail.push_back(*iter);
    			iter = students.erase(iter);
    		} else
    			++iter;
    	}
    	return fail;
    }
     
  • ์•„๊นŒ๋Š” const์˜€๋Š”๋ฐ ์ด๋ฒˆ์—” ์™œ ์•„๋‹ˆ๋ƒ๊ณ ? ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์žˆ๋Š” ๊ฒƒ์„ ์ง€์šฐ์ง€ ์•Š๋Š”๊ฐ€. ์ฆ‰ ๋ณ€ํ˜•์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋˜ ์‹ ๊ธฐํ•œ๊ฒŒ ๋ณด์ธ๋‹ค. ์™œ students.erase(iter) ํ•ด์ค€๊ฒƒ์„ ๋˜ iter์—๋‹ค ๋Œ€์ž…ํ•ด์ฃผ์—ˆ๋Š”๊ฐ€? ์‚ญ์ œํ•˜๋ฉด ๋ฐ˜๋ณต์ž๊ฐ€ ๋ชจ๋‘ ๊ฐฑ์‹ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ง€์šด ๋’ท๋ถ€๋ถ„์€ ๋ชฝ๋•… ์žฌํ• ๋‹น ํ•ด์•ผํ•˜๋‹ˆ... ์ง€๊ธˆ์€ ๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชฐ๋ผ๋„ ์ข‹๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ์•„๋‘์ž. erase๋Š” ๋ฐฉ๊ธˆ ์ง€์šด ๋ฐ”๋กœ ๊ทธ ๋ถ€๋ถ€์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.
  • ๋˜ ์ฝ”๋“œ ์ตœ์ ํ™” ํ•œ๋‹ค๊ณ  ๋‹ค์Œ๊ณ  ๊ฐ™์€ ์‚ฝ์งˆ์„ ํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
    ~cpp 
    while(iter != students.end())
    /*...*/
     
  • ์„
    ~cpp 
    vector<Student_info>::iterator iter = students.begin(). end_iter = students.end();
    while(iter != end_iter)
    /*...*/
     
  • ์ด๋ ‡๊ฒŒ ๋ง์ด๋‹ค. ํ•˜์ง€๋งŒ ์•ˆ๋œ๋‹ค. ์•„๊นŒ ๋งํ–ˆ๋“ฏ์ด, ํ•˜๋‚˜ ์ง€์šฐ๋ฉด ๊ทธ ๋’ค์˜ ๋ฐ˜๋ณต์ž๋Š” ๋ชจ๋‘ ๊ฐฑ์‹ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋†“์€ end_iter๋Š” ์“ธ๋ชจ๊ฐ€ ์—†์–ด์ง„๋‹ค. ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์ด ๋‚จ๋Š” ๊ฒƒ์ด๋‹ค.

  • 1.4. 5.4 Ranking our data structure for better performance

  • ๋ฒกํ„ฐ๋Š” ์ž„์˜ ์ ‘๊ทผ์„ ์ง€์›ํ•˜๋Š” ๋Œ€์‹ ์—, ์ค‘๊ฐ„ ์‚ฝ์ž…, ์‚ญ์ œ์˜ ์„ฑ๋Šฅ์ด ๊ผฌ๋ž๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ค‘๊ฐ„ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์ตœ์ ํ™”๋œ ์ƒˆ๋กœ์šด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž.

  • 1.5. 5.5 The list type

  • ๋ฐ”๋กœ list๋‹ค. ์ค‘๊ฐ„ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๋ฅผ ์ƒ์ˆ˜์‹œ๊ฐ„ ๋‚ด์— ์ˆ˜ํ–‰ํ• ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ vector๋กœ ์ง  ์ฝ”๋“œ๋ฅผ list๋กœ ์ง  ์ฝ”๋“œ๋กœ ๋ฐ”๊ฟ”๋ณด์ž. ๋ฐ”๋€๊ฒŒ ๋ณ„๋กœ ์—†๋‹ค. vector๊ฐ€ list๋กœ ๋ฐ”๋€๊ฑฐ ๋ง๊ณ ๋Š”... ๋‹ค์‹œ ํ•œ๋ฒˆ ๋งํ•˜์ง€๋งŒ list๋Š” ์ž„์˜ ์ ‘๊ทผ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ vector์—์„œ ์“ฐ๋˜๊ฒƒ์ฒ˜๋Ÿผ [] ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค.

  • 1.5.1. 5.5.1 Some important differences

  • ๋ฒกํ„ฐ๋Š” ์‚ฝ์ž…, ์‚ญ์ œ ํ• ๋•Œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ชฝ๋•… ์žฌํ• ๋‹นํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ~~.end()๋Š” ๋ฒ„๊ทธ์˜ ์˜จ์ƒ์ด ์™ผ๋‹ค. ๊ณ„์† ๋ฐ”๋€Œ๋ฏ€๋กœ... ํ•˜์ง€๋งŒ list๋Š” ์‚ฝ์ž…, ์‚ญ์ œํ•œ๋‹ค๊ณ  ๋ชฝ๋•… ์žฌํ• ๋‹นํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ๋น ๋ฅธ ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ ์ž„์˜ ์ ‘๊ทผ์„ ์ง€์›ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋งŒ ์“ธ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ sort๋„ ๋‹น์—ฐํžˆ ์“ธ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ list์˜ ๋ฉค๋ฒ„ํ•จ์ˆ˜๋กœ sort๊ฐ€ ์žˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์จ์ฃผ์ž.
    ~cpp 
    students.sort(compare);
     

  • 1.5.2. 5.5.2 Why bother?

  • ํ‘œ๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก vector์˜ ์š”์†Œ ์‚ฝ์ž…, ์‚ญ์ œ ์‹œ๊ฐ„์€ ๋น„์•ฝ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค. list๋Š” ๋ณ„๋กœ ์•ˆ ์ฆ๊ฐ€ํ•œ๋‹ค.

  • 1.6. 5.6 Taking strings apart

  • string๋„ vector์ฒ˜๋Ÿผ ์“ธ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” vector<char>์ด๋‹ˆ... vector์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค. []๊ณผ ๋ฐ˜๋ณต์ž๋Š” ๋ฌผ๋ก  size() ๋“ฑ๋“ฑ๋„..
  • ๊ทธ๋Ÿฌ๋ฉด์„œ ์ฃผ์–ด์ง„ string์„ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ์ž๋ฅธ ๋‹ค์Œ vector์— ๋„ฃ์–ด์„œ ๋ฆฌํ„ดํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค. ๋ณ„๋กœ ๋ณผ๊ฑด ์—†๋‹ค.
  • 1.7. 5.7, 5.8

  • ๊ทธ๋ƒฅ string๊ฐ€์ง€๊ณ  ํ™”๋ฉด์— ๋ฟŒ๋ฆฌ๋Š” ์ด์ƒํ•œ ์žฅ๋‚œ์น˜๊ณ  ์žˆ๋‹ค. ๋ณ„๋กœ ๋ณผ๊ฑฐ ์—†๋‹ค.
  • ์ง€๊ธˆ ๋ณด๋‹ˆ๊นŒ ์“ธ๋งŒํ•œ ํŒ์ด ํ•˜๋‚˜ ์žˆ๋‹ค. ๋ฐ”๋กœ ํ•œ ์ปจํ…Œ์ด๋„ˆ์— ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‚ด์šฉ๋“ค์„ ๋„ฃ๋Š” ์˜ˆ์ œ์ด๋‹ค.
    ~cpp 
    for(vector<string>::const_iterator i = bottom.begin(); i != bottom.end(); ++i)
        ret.push_back(*it);
     
  • ์ด๋ ‡๊ฒŒ ์“ธ๊ฒƒ์„,
    ~cpp 
    ret.insert(ret.end(), bottom.begin(), bottom.end());
     
  • ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํžˆ ์“ธ์ˆ˜ ์žˆ๋‹ค.


  • Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2021-02-07 05:22:25
    Processing time 0.0108 sec