1、考慮下面的 類聲明
class RQ1
{
private:char * st;
public:RQ1(){st = new char [1]; strcpy(st,"");}RQ1(const RQ1 & rq){st = new char [strlen(rq.st)+1]; strcpy(st,rq.st);}~RQ1(){delete [] st};RQ & OPERATOR = (cosnt RQ &rq);
};
?將它轉換為使用string對象的聲明。那些方法不再需要顯示定義?
答:
#include <string>
using namespace std;
class RQ1
{
private:string st;
public:RQ1() :st(""){}RQ1 (const char * s): st(s){}~RQ1() {};
};
不再需要顯式復制構造函數、析構程序和賦值運算符,因為string對象提供了自己的內存管理功能。
2、在易于使用方面,指出string對象至少兩個優于C-風格字符串的地方。
答:可以將一個string對象賦給另一個。string對象提供了自己的內存管理功能,所以一般不需要擔心字符串超出存儲容量。
3、編寫一個函數,用string對象作為參數,將string對象轉換為全部大寫。
答:
#include <string>
#include <cctype>
using namespace std;
void ToUpper(string & str)
{
for (int i = 0; i < str.size(); i++)str[i] = toupper(str[i]);
}
4、從概念上或語法上說,下面哪個不是正確使用auto_ptr的方法?
auto_ptr<int> pia(new int [20]);
auto_ptr<string>(new string);
int rigue = 7;
auto_ptr<int>pr(&rigue);
auto_ptr db1 (new double);
答:
auto_ptr<int> pia= new int [20];// wrong,use with new,not new []
auto_ptr<string>(new string); // wrong,no name for pointer
int rigue = 7;
auto_ptr<int> (&rigue);// wrong,memory not allocated by new
auto _ptr dbl (new double);// wrong,omits <double>
5、如果可以生成一個存儲高爾夫球棍(而不是數字)的棧,為何它(從概念上說)是一個壞的高爾夫袋子?
答:棧的LIFO特征意味著可能必須在到達所需要的球棍(club之前刪除很多球棍。
6、為什么說對于逐洞記錄高爾夫成績來說,set容器是糟糕的選擇?
答:集合將只存儲每個值的一個鉑貝,因此,5個5分將被存儲為1個5分。
7、既然指針是一個迭代器,為什么STL設計人員為沒有簡單的使用指針來代替迭代器呢?
?答:使用迭代器使得能夠使用接口類似于指針的對象遍歷不以數組方式組織的數據,如雙向鏈表中的數據。
8、為什么STL設計人員僅定義了迭代器基類,而使用繼承來派生其他迭代器類型的類,并根據這些迭代器類來表示算法?
答:STL 方法使得可以將STL 函數用于指向常規數組的常規指針以及指向STL容器類的迭代器,因此提高了通用性。??
9、給出vector對象比常規數組方便的3個例子。
?答:可以將一個vector對象賦給另一個。vector管理自己的內存,
因此可以將元素插入到矢量中,并讓它自動調整長度。使用at()方法,可以自動檢查邊界。
10、如果程序清單時使用list而不是vector實現的 ,則該程序的哪些部分是非法的?非法部分能夠輕松修復嗎?如果可以,如何修復呢?
答:這兩個vector函數和random_shuffle()函數要求隨機訪問迭代器,而list對象只有雙向迭代器。可以使用 list模板類的sort( )成員函數(參見附錄G),而不是通用函數來排序,但沒有與random_shuffe()等效的成員函數。然而,可以將鏈表復制到矢量中,然后打亂矢量,并將結果重新復制到鏈表中。
11、如果程序清單所示的函數符TooBig,下面的代碼有何功能?賦給bo的是什么值?
bool bo = TooBig<int>(10)(15);
答:
- 使用?
10
?作為參數實例化?Comparator<int>
?類型的對象。 - 使用?
15
?調用該對象的?operator()
,并返回結果(false
,因為?10
?不大于?15
)。 - 將返回的結果(
false
)賦值給?bool
?類型的變量?bo
。
所以,賦給?bo
?的值是?false
。