本篇博文的開始,先介紹一道書上看到的智力題:有20瓶藥丸,其中19瓶裝有1克/粒的藥丸,余下一瓶裝有1.1克/粒的藥丸。有一台稱重精准的天平,只是用一次天平的情況下如何找出比較重的那瓶藥丸?
好了,直接公布答案。從藥瓶#1取出一粒藥丸,從藥瓶#2取出兩粒,從藥瓶#3取出三粒,依此類推。如果每粒藥丸均重1克,則稱得總重量為210克(1 + 2 + … + 20 = 20 * 21 / 2 = 210),“多出來的”重量必定來自每粒多0.1克的藥丸。藥瓶的編號可由算式(weight - 210 grams) / 0.1 grams得出。因此,若這堆藥丸稱得重量為211.3克,則藥瓶#13裝有較重的藥丸。
各位是否想出了這樣的方法呢(反正我是沒有,哈哈)?
接下來就直奔主題,本文著重介紹標准庫類型,但不面面俱到,僅以其中兩種最常見的類型string和vector為例,初窺標准庫,其余內容見後續博客。
標准庫String類型
標准庫vector類型
迭代器簡介
為了形象理解如上所述,舉個簡單的例子:讀取一組整數到vector對象,計算首尾配對的元素和並輸出。
1 vector<int> ivec;
2 int ival;
3
4 cout << "Enter numbers: " << endl;
5 while (cin >> ival)
6 ivec.push_back(ival);
7
8 if (ivec.size() == 0)
9 {
10 cout << "NO Elemnts!" << endl;
11 return -1;
12 }
13
14 cout << "Sum of each pair of counterpart elements in the vector: " << endl;
15
16 vector<int>::size_type cnt = 0;
17 vector<int>::iterator first, last;
18 for (first = ivec.begin, last = ivec.end() - 1; first < last; ++first, --last)
19 {
20 cout << *first + *last << " ";
21 ++cnt;
22 if (cnt % 6 == 0)
23 cout << endl;
24 }
25
26 if (first == last)
27 cout << endl
28 << "The center element is: "
29 << ivec[first] << endl;