U E D R , A S I H C RSS

AcceleratedC++/Chapter4

2. Chapter 4 Organizing programs and data

  • ––ค ข…ฅ˜˜ ฌธ œฅผ ‘ผ‹ค.
  • ‹คฅธ ๊ฒƒ“ค๊ณผ …ฆฝ ‹ค.
  • ฆ„„ ๊ฐ€€๊ณ  žˆ–••œ‹ค.

    3žฅ๊นŒ€ ˜ ๊ฒƒ€ ฒซฒˆงธ๊ฒƒงŒ žˆ๊ณ , ‚˜จธ€ ๊ฒƒ€ —†‹ค. ”„กœ๊ทธžจ ž‘„•ŒŠ” ณ„กœ ƒ๊€—†€งŒ, €๊ธฐ ‹œž‘•˜„œ€„ฐ 2,3ฒˆงธ ๊ฒƒ ๊ฒฐ—ฌ˜, ‚˜ค‘—”  œ–๊ฐ€ ถˆ๊ฐ€Šฅ•ง„‹ค. C++—„œŠ” ‹คฅธ –ธ–™€ งˆฐฌ๊ฐ€€กœ •ˆ˜ + žฃŒ๊ตฌกฐฅผ  œ๊ณต•œผกœจ, ”„กœ๊ทธžจ„ ๊ตฌกฐ™”‹œ‚ฌˆ˜ žˆŠ” ฐฉ•„  œ๊ณต•œ‹ค. ˜•œ •ˆ˜ + žฃŒ๊ตฌกฐฅผ ฌถ–„œ ๊ฐ€€๊ณ  †€ ˆ˜ žˆŠ” classผŠ” „๊ตฌฅผ  œ๊ณต•€‹ค.(Chapter9€„ฐ ž„ธžˆ ‚Žณธ‹ค.)
    ๊ทธŸฌ€กœ ฒˆžฅ€„ฐŠ” ”„กœ๊ทธžจ„ ‚˜ˆ „œ, „œกœ ‹คฅธ ŒŒผ—  €žฅ, ŒŒผ•˜Š” •๊ณผ, ‚˜ค‘— •น˜Š” • “ฑ„ ๊ณต€•  ๊ฒƒ‹ค.

2.1. 4.1 Organizing computations

  • 3žฅ๊นŒ€˜ ”„กœ๊ทธžจ„ “ฑ๊ธ‰„ ฉ”๊ธฐŠ” €ถ„ žˆ‹ค.  €ถ„„ •ˆ˜กœ ถ”ถœ•ž. •ˆ˜กœ ถ”ถœ•œผกœจ, ‚˜ค‘— ˜‘๊ฐ™€ ‚šฉ„ ˜ ฝ””ฉ•  •„š”๊ฐ€ —†๊ณ , •Œ•„๊ธฐ„ ‰ฌ›Œง„‹ค. ˜•œ “ฑ๊ธ‰ ฉ”๊ธฐŠ” ฐฉ•„ ฐ”๊ฟ€•Œ ๊ทธ •ˆ˜ €ถ„—งŒ ฌธ œฅผ •œ •€„ ˆ˜๊ฐ€ žˆ‹ค. ˜•œ •ˆ˜— ฆ„„ €–คŒœผกœจ, ”šฑ ถ”ƒ™”‹œ‚ฌˆ˜๊ฐ€ žˆ๊ฒŒ œ‹ค.
  • •žžฅ—„œ “ฑ๊ธ‰„ ถœ ฅ•˜Š” €ถ„„ ‚Ž,
    ~cpp 
    	cout << "Your final grade is " << setprecision(3)
    		<< 0.2 * midterm + 0.4 * final + 0.4 * median
    		<< setprecision(prec) << endl;
     
     ‡๊ฒŒ ƒ๊ฒผ‹ค. ‘˜งธค„˜ “ฑ๊ธ‰ ๊ณ„‚ฐ•˜Š” €ถ„„ ‹คŒ๊ณผ ๊ฐ™ •ˆ˜กœ ฝ‘•„‚ผ ˆ˜๊ฐ€ žˆ‹ค.
    ~cpp 
    double grade(double midterm, double final, double homework)
    {
        return 0.2 * midterm + 0.4 * final + 0.4 * homework;
    }
    /* ... */
    int main() 
    {
    /* ... */
    	cout << "Your final grade is " << setprecision(3)
    		<< grade(midterm, final, sum / count)
    		<< setprecision(prec) << endl;
    
    	return 0;
    }
    
     

  • •ˆ˜ งŒ“œŠ” •„ 𔕕ž
    ~cpp 
    return_type function_name(parameter lists...) { •ˆ˜ ‚—„œ •  ผ“ค }
     
     ‡๊ฒŒ •˜ œ‹ค.

  • •ˆ˜ฅผ ˜ธถœ• •Œ—Š” •ˆ˜ฅผ งŒ“ค•Œ ฃผ–กŒ˜ parameter listsฅผ ถฉกฑ‹œ‚คŠ” ๊ฐ’“ค„ „ฃ–ค˜••œ‹ค. ฌผก  ˆœ„œ„ งžถฐค˜••œ‹ค. argumentsผ๊ณ „ •œ‹ค. argumentsŠ” ‹  ˆ˜„ žˆ‹ค. ๊ทธ ’ค— •ˆ˜กœ „˜–๊ฐ„ parameter“ค€ •ˆ˜ ‚—„œ €—ญ €ˆ˜(•ˆ˜๊ฐ€ ‚˜ †Œฉธ˜Š”)ฒ˜Ÿผ ž‘™•˜๊ฒŒ œ‹ค. ฆ‰ ๊ทธ ๊ฐ’“ค„ ณต‚ฌ•˜๊ฒŒ ˜Š” ๊ฒƒ‹ค. ฅผ call by valueผ •œ‹ค.

  • 2.1.1. 4.1.1. Finding medians

  • •ž—„œ šฐฆฌŠ” vector— “ค–๊ฐ€ žˆŠ” ๊ฐ’—„œ ค‘๊ฐ„๊ฐ’ ฐพŠ” ๊ฑธ –ˆ—ˆ‹ค. Chapter8—„œŠ” vector— “ค–๊ฐ€ žˆŠ” type— ๊€๊ณ„—† ž‘™•˜๊ฒŒ •˜Š” •„ ฐฐšธ ๊ฒƒ‹ค. €๊ธˆ€ vector<double>กœงŒ •œ •ง“ž. median ๊ตฌ•˜Š” ฃจ‹„ •ˆ˜กœ นผž.
    ~cpp 
    double median(vector<double> vec)
    {
    	typedef vector<double>::size_type vec_sz;
    
    	vec_sz size = vec.size();
    	if (size == 0)
    		throw domain_error("median of an empty vector.");
    	
    	sort(vec.begin(), vec.end());
    	vec_sz mid = size/2;
    
    	return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
    }
     
  • —ฌ๊ธฐ„œ ‚Žณผ ๊ฒŒ ‡๊ฐ€€ žˆ‹ค. €‚œฒˆ—Š” vector˜ ฌ๊ธฐ๊ฐ€ 0 ๊ทธƒ”„กœ๊ทธžจ„ ข…ฃŒ‹œผœฒ„ ธ€งŒ, —ฌ๊ธฐ„œŠ” ˜ˆ™ฒ˜ฆฌผŠ” ‹ ๊ธฐˆ „ ‚ฌšฉ–ˆ‹ค.  ฐฉ•€ —ฌ๊ธฐ„œ ‚€ •Š๊ณ  ‹คŒ €ถ„œผกœ „˜–๊ฐ„‹ค. <stdexcept>ฅผ ฌ•‹œผœ ฃผ œ‹ค.
  • ˜•œ, •„๊นŒ •ˆ˜ ˜ธถœ•˜„œ parameterกœ „˜๊ฒจค„•Œ—Š” ๊ทธ ๊ฐ’„ ณต‚ฌฅผ •œ‹ค๊ณ  –ˆ‹ค.  € ‡๊ฒŒ •ˆ˜ฅผ ˜ธถœ•œผกœจ, ›ž˜ vectorฅผ †ƒ‹œ‚ค€ •Š๊ณ , ณต‚ฌณธ vector—„œ sortฅผ •„œ ž‘—…„ ฒ˜ฆฌ• ค„ˆ˜๊ฐ€ žˆ‹ค. น„ก ‹œ๊ฐ„ € ” ๊ฑธฆฌ๊ธ •˜€งŒ..

  • 2.1.2. 4.1.2 Reimplementing out grading policy

  • ฏค ™€„œ •ˆ˜˜ œ šฉ•„ •Œ•˜‹ค, šฐฆฌ˜ „ฑ  งค๊ธฐŠ” ฐฉ•„ ”ฐกœ •ˆ˜กœ ฝ‘•„‚๊ณ  ‹ถ„ ๊ฒƒ‹ค. ‹คŒ ˜ˆ œฅผ ž.
    ~cpp 
    double grade(double midterm, double final, const vector<double>& hw)
    {
    	if(hw.empty())		// ฑ…—„œŠ” hw.size()==0 ผ๊ณ  ˜– žˆ€งŒ 
    				// empty()ฉ”†Œ“œฅผ ˜ธถœ•˜Š” ๊ฒƒ ” šจœจ ผ๊ณ  •˜”๊ตฐš”.
    		throw domain_error("student has done no homework");
    	return grade(midterm, final, median(hw));
    }
     
  • —ฌ๊ธฐ„œ ˆˆ—ฌ๊ฒจณผ „ธ๊ฐ€€ ‚ฌ• žˆ‹ค.
    • const vector<double>& hw : ๊ฒƒ„ šฐฆฌŠ” double˜• const vectorกœ˜ ฐธกฐผ๊ณ  €ฅธ‹ค. referenceผŠ” ๊ฒƒ€ –– •œ ๊ฐ˜ ˜‹คฅธ ฆ„„ ง•œ‹ค. ˜•œ constฅผ ”€œผกœจ,  € ๊ฐฅผ €๊ฒฝ•˜€ •ŠŠ”‹คŠ” ๊ฒƒ„ žฅ•€‹ค. ˜•œ šฐฆฌŠ” referenceฅผ ”€œผกœจ, ๊ทธ parameterฅผ ณต‚ฌ•˜€ •ŠŠ”‹ค. ฆ‰ parameter๊ฐ€ ‹คž€ ๊ฐผ•Œ, ๊ทธ๊ฒƒ„ ณต‚ฌ•œผกœจ ƒ๊ธฐŠ” overheadฅผ —†•ˆ˜ žˆŠ” ๊ฒƒ‹ค.

  • ~cpp 
    vector<double> homework;
    vector<double>& hw = homework;
    // hwŠ” homework™€ ๊ฐ™‹ค. ฆ‰, ฆ„€ ‹ค€งŒ, hwฅผ ๊ณ น˜ homework„ ๊ฐ™ ๊ณ ณง„‹ค. ™œƒ? ๊ฐ™œผ‹ˆ๊นŒ
     
    • grade() function : šฐฆฌŠ” •„๊นŒ gradeผŠ” •ˆ˜ฅผ งŒ“ค—ˆ—ˆ‹ค. ๊ทธŸฐฐ ฒˆ— ฆ„€ ๊ฐ™œผ„œ parameterŠ” กฐ๊ธˆ ‹คฅธ grade()ฅผ ˜ งŒ“ค—ˆ‹ค. Ÿฐ๊ฒŒ ๊ฐ€Šฅ•œ๊ฐ€? ๊ฐ€Šฅ•˜‹ค. Ÿฌ•œ ๊ฒƒ„ •ˆ˜˜ overloadingผ๊ณ  •œ‹ค. •ˆ˜ ˜ธถœ• •Œ ––ค๊ฒŒ ˜ธถœ ๊นŒŠ” ”ฐผ๊ฐ€Š” parameter lists— ˜• ๊ฒฐ •œ‹ค.
    • exception : ‚ฌšฉž—๊ฒŒ —‡ ž˜˜—ˆŠ”๊ฐ€ฅผ •Œ คฃผŠ” exception„ ˜ ธ€‹ค.

    2.1.3. 4.1.3 Reading homework grades

  •  œ šฐฆฌ๊ฐ€ ’€–••  ฌธ œŠ”, ˆ™ œ˜ “ฑ๊ธ‰„ vectorกœ ฝ–“คŠ” ๊ฒƒ‹ค. —ฌ๊ธฐ—Š” ‘๊ฐ€€˜ ฌธ œ  žˆ‹ค. ฐ”กœ ฆฌ„๊ฐ’ ‘๊ฐœ—ฌ••œ‹คŠ”  ‹ค. •˜‚˜Š” ฝ–“คธ “ฑ๊ธ‰“ค๊ณ , ˜ ‹คฅธ •˜‚˜Š” ๊ทธ๊ฒƒ „ฑ๊ณต–ˆ‚˜ •˜Š”๊ฐ€‹ค. •˜‚˜˜ Œ€•ˆ žˆ‹ค. ฐ”กœ ฆฌ„•˜๊ณ ž •˜Š” ๊ฐ’„ ฆฌ„•˜€ ง๊ณ , ๊ทธ๊ฒƒ„ referenceกœ „˜๊ฒจ„œ €๊ฒฝ•ฃผŠ” •‹ค. constฅผ ™€ •Š€ referenceŠ” ”žˆ ๊ทธ ๊ฐ’„ €๊ฒฝ• •Œ “ฐธ‹ค. referenceกœ „˜–๊ฐ€Š” ๊ฐ’„ €๊ฒฝ•••˜€กœ ––ค ‹(expression) referenceกœ „˜–๊ฐ€ •ˆœ‹ค.(lvalue๊ฐ€ •„‹ˆผ๊ณ „ •œ‹ค. lvaluež€ ž„‹œ ธ ๊ฐ๊ฐ€ •„‹Œ ๊ฐฅผ ง•œ‹ค.)
    ~cpp 
    istream& read_hw(istream& in, vector<double>& hw)
    {
    	double x;
    	while(in >> x)				// ฐจฐจ ‚Žณผ…Œ€งŒ ๊ฑ ž˜˜—ˆ‹ค.
    		hw.push_back(x);
    }
    
    read_hw(cin, homework);	// ˜ธถœ
     
  • œ„—„œ ž˜œ €ถ„„ ฐพ•„ž.
    • hw๊ฐ€ „˜–˜ค„œ hw•ˆ— •„๊ฒƒ„ —†‹คŠ” ๊ฒƒ„ žฅ• ˆ˜ žˆ๊ฒ Š”๊ฐ€? จผ €ฒˆ— “ฐ˜ •™ƒ“ค˜  ˆ˜๊ฐ€ “ค–žˆ„€„ ฅธ‹ค. ™•‹ค•˜๊ฒŒ —†• ฃผ๊ธฐ œ„• hw.clear()ฅผ •ฃผž.
    •  € while ฃจ”„๊ฐ€ –ธ œ ฉˆถœ€ •Œˆ˜ žˆŠ”๊ฐ€? ŒŒผ˜ — „‹ฌ–ˆ๊ฑฐ‚˜, ž… ฅฐ›€๊ฒŒ “ฑ๊ธ‰ •„‹•Œผ ๊ฒƒ‹ค.
      • ŒŒผ˜ — „‹ฌ–ˆ‹คŠ” ๊ฒƒ = ฝ๊ธฐ ‹คŒจ
      • ž… ฅฐ›€๊ฒŒ “ฑ๊ธ‰ •„‹•Œ( ˆ˜ฅผ ž… ฅ••˜Š”ฐ ƒ•œ ๊ฒƒ„ ž… ฅ–ˆ„•Œ) istream ๊ฐ in€ ‹คŒจ ƒƒœ๊ฐ€ œ‹ค. ˜•œ ๊ทธ๊ฒƒ„ ฝ€ •ŠŠ”‹ค. ŒŒผ˜ — „‹ฌ•œ๊ฒƒ ฒ˜Ÿผ...
    •  ƒ™„ •๊ฒฐ•˜๊ธฐ œ„•, ๊ทธƒฅ in๊ฐ˜ ƒƒœฅผ ˆ๊ธฐ™”•ค˜ฒ„ฆฌž. in.clear() “  —Ÿฌ ƒƒœฅผ ฆฌ…‹‹œผœ€‹ค.

  • ~cpp 
    istream& read_hw(istream& in, vector<double>& hw)
    {
    	if(in)
    	{
    		hw.clear();
    		double x;
    		while(in >> x)
    			hw.push_back(x);
    		in.clear();
    	}
    	return in;
    }
     
    DeleteMe) ‘ฒˆงธ๊ฐ€ ž˜ •๊ฐ€ •ˆ๊ฐ€„ค.. ˆ„๊ฐ€ ž˜ •„‹œŠ” ถ„€ …พŒ•œ „ค… €ƒ“œฆฝ‹ˆ‹ค.

    2.1.4. 4.1.4 Three kinds of function parameters

  • €๊ธˆ๊นŒ€ งŒ“  „ธ๊ฐœ˜ •ˆ˜ median, grade, read_hw ฅผ ‚Žž.
    • median •ˆ˜ฅผ , vector<double> ŒŒผฉ”„ฐ๊ฐ€ ฐธกฐกœ „˜–๊ฐ€€ •ŠŠ”‹ค. •™ƒˆ˜๊ฐ€ งŽ•„งˆˆ˜ก งคšฐ ฐ ๊ฐ๊ฐ€  …ฐ ‚ญน„๊ฐ€ •„‹Œ๊ฐ€? •˜๊ณ  ƒ๊ฐ• ˆ˜„ žˆ€งŒ, –ฉ”ˆ˜ —†‹ค. •ˆ˜ ‚€—„œ †ŒŒ…„ •ฒ„ฆฌ๊ธฐ •Œฌธ— ฐธกฐกœ „˜๊ธฐ, …Œ„ˆ˜ ƒƒœ๊ฐ€ €•ฒ„ฆฐ‹ค.
    • grade •ˆ˜ฅผ , vectorŠ” const ฐธกฐกœ „˜๊ธฐ๊ณ , double€ ๊ทธ ‡€ •Š‹ค. int‚˜ double๊ฐ™€ ๊ธฐณธ˜•€ ฌ๊ธฐ๊ฐ€ ž‘๊ธฐ •Œฌธ—, ๊ทธƒณต‚ฌกœ „˜๊ฒจ„ ถฉถ„žˆ น ‹ค. ญ ๊ฐ’„ €๊ฒฝ••• •Œผ ฐธกฐกœ „˜๊ฒจ•ผ๊ฒ €งŒ... const ฐธกฐŠ” ๊ฐ€žฅ ผฐ˜ ธ  „‹ฌฐฉ‹‹ค.
    • read_hw •ˆ˜ฅผ , ณต‚ฌŠ” •˜€ •Š๊ณ , ๊ทธ ๊ฐ’„ €๊ฒฝ•˜๊ธฐ œ„• ฐธกฐงŒ ผ‹ค.
  • const๊ฐ€ •„‹Œ ฐธกฐ˜• ŒŒผฉ”„ฐŠ” lvalue—ฌ•งŒ •œ‹ค.

  • 2.1.5. 4.1.5 Using functions to calculate a student's grade

  • †ŒŠคฅผ ƒˆกœš๊ฒŒ ˆˆ— ˆ‹ค. ฐ”กœ try‹ค. ‹คŒ๊ณผ ๊ฐ™ “‹ค.
    ~cpp 
    	try {
    		// •˜‹ค๊ฐ€ ˜ˆ™ฐœƒ•˜, ค‘‹จ•˜๊ณ 
    	}
    	catch(domain_error) {
    		// ฆฌกœ ˜จ‹ค. งŒ•— try •ˆ—„œ ˜ˆ™•ˆ œจ catch •ˆ€ ˆ˜–‰•ˆ•œ‹ค.
    	}
     

  • —ฌ๊ธฐ๊นŒ€ ตœข…†ŒŠค

    ~cpp 
    #include <ios>
    #include <iomanip>
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <stdexcept>
    
    using namespace std;
    
    double grade(double midterm, double final, double homework);
    double grade(double midterm, double final, const vector<double>& hw);
    double median(vector<double> vec);
    istream& read_hw(istream& in, vector<double>& hw);
    
    int main()
    {
    	cout << "Please enter your first name: ";
    	string name;
    	cin >> name;
    	cout << "Hello, " << name << "!";
    
    	cout << "Please enter your midterm and final exam grades: ";
    	double midterm, final;
    	cin >> midterm >> final;
    
    	cout << "Enter all your homework grades, "
    			"follewd by end-of-file: ";
    
    	vector<double> homework;
    
    	read_hw(cin, homework);
    
    	try
    	{
    		double final_grade = grade(midterm, final, homework);
    
    		streamsize prec = cout.precision();
    		cout << "Your final grade is " << setprecision(3)
    			<< final_grade << setprecision(prec) << endl;
    	}
    	catch(domain_error)
    	{
    		cout << endl << "You must enter your grades. "
    			"Please try again." << endl;
    		return 1;
    	}
    
    	return 0;
    }
    
    double grade(double midterm, double final, double homework)
    {
    	return 0.2 * midterm + 0.4 * final + 0.4 * homework;
    }
    
    double grade(double midterm, double final, const vector<double>& hw)
    {
    	if(hw.size() == 0)
    		throw domain_error("Student has done no homework");
    
    	return grade(midterm, final, median(hw));
    }
    
    double median(vector<double> vec)
    {
    	typedef vector<double>::size_type vec_sz; 
    
    	vec_sz size = vec.size();
    
    	if(size == 0)
    		throw domain_error("median of an empty vector");
    
    	sort(vec.begin(),vec.end());
    
    	vec_sz mid = size / 2;
    
    	return size % 2 == 0 ? (vec[mid] + vec[mid-1]) / 2 : vec[mid];
    }
    
    istream& read_hw(istream& in, vector<double>& hw)
    {
    	if(in)
    	{
    		hw.clear();
    
    		double x;
    		while(in >> x)
    			hw.push_back(x);
    
    		in.clear();
    	}
    	return in;
    }
    

    2.2. 4.2 Organizing data

    • —ฌƒœ๊นŒ€Š” •œ •™ƒ˜ ฐ„ฐงŒ ๊ฐ€€๊ณ  †€•˜‹ค. •˜€งŒ „ฑ  ฒ˜ฆฌ ”„กœ๊ทธžจ€, “  •™ƒ˜ ฐ„ฐฅผ Œ€ƒœผกœ •œ‹ค. — ‹ค‹œ ๊ณ„ ธ ฐ„ฐ ๊ตฌกฐ๊ฐ€ •„š”•˜‹ค.

    2.2.1. 4.2.1 Keeping all of a student's data together

  • •™ƒ˜ ฐ„ฐฅผ ฌถ– ž. —ฌ๊ธฐ„œ structž€ ƒˆกœš ๊ตฌฌธ ‚˜˜จ‹ค. {}•ˆ— ฉคฒ„กœ „ฃ๊ณ  ‹ถ€ €ˆ˜“ค„ ™ จฃผ œ‹ค.  ‘๊ทผ• ผ . จฃผ๊ณ  €ˆ˜ “ฐ œ‹ค.
    ~cpp 
    struct Student_info {
    	string name;
    	double midterm, final;
    	vector<double> homework;
    };
     
  • ฐ„ฐ ๊ตฌกฐ๊ฐ€ ฐ”€Œ—ˆœผ‹ˆ, šฐฆฌ˜ ”„กœ๊ทธžจ„ •ฝ๊ฐ„ €๊ฒฝ„ •••  ๊ฒƒ‹ค. จผ € read
    ~cpp 
    istream& read(istream& is, Student_info& s)
    {
    	is >> s.name >> s.midterm >> s.final;
    	read_hw(is, s.homework);
    	return is;
    }
     
    • is >> „ , string„ ฝ—ˆ‹ค๊ฐ€ double„ ฝ๊ธฐ„ •œ‹ค. ๊ฒŒ ๊ฐ€Šฅ•œ œ Š” ˜คฒ„กœ”ฉ •Œฌธ‹ค.
    • Student_info˜• €ˆ˜ s˜ ๊ฐ’„ €๊ฒฝ‹œ‚ค๊ธฐ œ„• ฐธกฐกœ „˜๊ฒจคฌ‹ค.
  • ‹คŒ—” grade. ˜›‚  ฒ„ ผ€ ธžกœ midterm, final, homework“ฑ„ ฐ›•˜€งŒ, ˜คฒ„กœ”ฉ„ šฉ•„œ, Student_info •˜‚˜งŒ„ ฐ›„ก •ž.
    ~cpp 
    double grade(const Student_info& s)
    {
    	return grade(s.midterm, s.final, s.homework);
    }
     
  • งˆ€ง‰œผกœ sort. šฐฆฌŠ” ‹คŒ๊ณผ ๊ฐ™ –ˆ—ˆ‹ค.
    ~cpp 
    sort(vec.begin(), vec.end());
     
    •  € vec€ double˜• ๊ฐ’„ ‹๊ณ  žˆ—ˆ๊ธฐ 떄ฌธ—, ˆœ„œŒ€กœ sort•˜ ˜—ˆ—ˆ‹ค. •˜€งŒ šฐฆฌ๊ฐ€ งŒ“  Student_infoŠ” ––๊ฒŒ sortฅผ • ๊นŒ?

  • ~cpp 
    sort(students.begin(), students.end());       // ๊ณผ—ฐ? #!$%#@^#@$#
     
    • —‡„ ๊ธฐ€œผกœ sortฅผ • ๊ฒƒธ๊ฐ€? ฆ„? midterm? final? •Œˆ˜๊ฐ€ —†‹ค. ”ฐผ„œ šฐฆฌŠ” predicateผŠ” ๊ฒƒ„  •˜• ฃผ–••œ‹ค. ‹คŒ๊ณผ ๊ฐ™ •ฃผ œ‹ค.

    ~cpp 
    bool compare(const Student_info& x, const Student_info& y)
    {
    	return x.name < y.name;
    }
    
    sort(students.begin(), students.end(), compare);
     

    2.2.2. 4.2.3. Generating the report

  • max(๊ฐ™€ ƒ€ž…˜ ŒŒผฉ”„ฐ ‘๊ฐœ) : ญ ฐ๊ฐ’„ ฆฌ„• ฃผ๊ฒ €
  • string(๊ธธ,'ฌธž') : ๊ธธงŒผ˜ 'ฌธž'ฅผ ƒ„ฑ•€‹ค.
  • catch(domain_error e) •œ ‹คŒ— Šจ ˜ˆ™‚ฌŠ”€ •Œ๊ณ  ‹ถœผ e.what()„ •€‹ค.

  • 2.3. 4.3. Putting it all together

  • ถ„ฆฌ ŒŒผž‘ —ค” ŒŒผ •ผ๊ธฐ ‚˜˜จ‹ค. ๊ทธƒ„˜–๊ฐ€ž.
  • —ค” ŒŒผ—„œŠ” using namespace Ÿฐ๊ฑฐ “ฐ€ ง๊ณ  ๊ทธƒ’€ „คž„ จฃผž. std:vector  ‡๊ฒŒ...
  • ‘ฒˆ ƒ ฌ•˜Š” ๊ฒƒ„ ฐฉ€ •˜๊ธฐ œ„•, #ifndef, #define, #endif Ÿฐ๊ฑฐ •ฃผž. ๊ทธŸฌ„œ  „ฒ˜ฆฌ๊ธฐ •ผ๊ธฐ๊ฐ€ ‚˜˜จ‹ค.
    ~cpp 
    #ifndef GURAD
    #define GUARD
    /* ...
       ...
       ... */
    #endif
     

  • 2.4. 4.4. Partitioning the grading program

  • ๊ทธƒผ๊ฐœŠ” ๊ฑฐ‹ค.

  • 2.5. 4.5. The revised grading program

  • ๊ทธƒ๊ธฐ ข‹•„กŒ‹คŠ” –˜๊ธฐ•˜๊ณ  žˆ‹ค.


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