More and more use is being made of the standard libraries in C++ programming. The two most important ones are the string and vector template libraries. The string template can replace most of the use of C strings (which use the char* type). The vector template can replace most of the uses of the simple array type in C. The attached assignment and solution shows how these two can be used together in a program.
By including the header file string, you can use type safe strings of characters in your programs. In fact, the type string is a typedef for basic_string<char>, so basic_string is a a template for using character strings. The important capabilities of the type string are:
string str("abcd") // makes a string str from the C string "abcd"
str[n] // returns a reference to the character at index n in the string str
str.length() // returns the number of characters in the string
str = "abcd" // copies the C string "abcd" into the string str (also works with a string on the RHS)
str.c_str() // returns the C string from the string str
str.append("abcd") // appends the C string "abcd" to the string in str
// (also works with an argument of type string)
cout << str // << is overloaded for the type string
cin >> str // so is >>
str1 > str2 // strings can be compared with any relational operator
str.find('x') // returns the index of the character x in the string str,
// or the constant string::npos if the character is not found
// (also works with an argument which is a C string or a string)
By including the header file vector, you can use encapsulated arrays of any type of element. Since an array is a container, the vector class is a template, i.e. it takes a single parameter which is the name of the type of its elements. For instance: vector<int> is an array of integers, and vector<float*> is an array of pointers to floats. In fact, any type can be used as the parameter to the template. In the attached program, the type used is Book, so vector<Book> is an array of books. The Library program shows how to use a vector as if it was a C array. In fact only the declaration of the type of collection was changed; the rest of the program remained exactly the same. This shows that a vector can be considered to be an array; no more knowledge is necessary to use it. Notice the use of the initializer list in the constructor for Library:
class Library {
private:
vector<Book> collection;
...
public:
Library() : collection(100) { number = 0; }
...
};
The value 100 is passed to the constructor for the class vector<Book> to make sure 100 elements of type Book are provided in the (internal) array of the object collection.
The important capabilities of the vector template class are:
vector<int> arr // create an empty vector of integers arr
vector<int> arr(10) // create a vector, arr, of 10 integers
arr.size() // returns the number of elements in the vector arr
arr.empty() // returns true if the vector arr has no elements, false otherwise
arr[n] // returns a reference to the nth element or arr
arr1 = arr2 // copy vector arr2 into vector arr1 (which is destroyed)
arr.push_back(20) // add an item dynamically to the end of the vector arr
// (the vector is extended, as necessary)
arr.pop_back() // remove an item from the end of arr
for (int n = 0; n < arr.size(); n++) // a typical way to process the elements of the vector arr