diff --git a/lectures/08_vector_implementation/README.md b/lectures/08_vector_implementation/README.md index 568a01f..02792f7 100644 --- a/lectures/08_vector_implementation/README.md +++ b/lectures/08_vector_implementation/README.md @@ -51,10 +51,10 @@ template void Vec::create(... ## 8.3 Syntax and Compilation - Templated classes and templated member functions are not created/compiled/instantiated until they are -needed. Compilation of the class declaration is triggered by a line of the form: Vec v1; with int -replacing T. This also compiles the default constructor for Vec because it is used here. Other member +needed. Compilation of the class declaration is triggered by a line of the form: Vec<int> v1; with int +replacing T. This also compiles the default constructor for Vec<int> because it is used here. Other member functions are not compiled unless they are used. -- When a different type is used with Vec, for example in the declaration: Vec z; the template class +- When a different type is used with Vec, for example in the declaration: Vec<double> z; the template class declaration is compiled again, this time with double replacing T instead of int. Again, however, only the member functions used are compiled. - This is very different from ordinary classes, which are usually compiled separately and all functions are compiled @@ -69,7 +69,7 @@ about functions being “multiply defined”. Some of you have already seen thes ## 8.4 Member Variables -Now, looking inside the Vec class at the member variables: +Now, looking inside the Vec<T> class at the member variables: - m_data is a pointer to the start of the array (after it has been allocated). Recall the close relationship between pointers and arrays. - m_size indicates the number of locations currently in use in the vector. This is exactly what the size() @@ -81,13 +81,13 @@ m alloc. ## 8.5 Typedefs - Several types are created through typedef statements in the first public area of Vec. Once created the names -are used as ordinary type names. For example Vec::size type is the return type of the size() function, +are used as ordinary type names. For example Vec<int>::size type is the return type of the size() function, defined here as an unsigned int. ## 8.6 operator[] Access to the individual locations of a Vec is provided through operator[]. Syntactically, use of this operator -is translated by the compiler into a call to a function called operator[]. For example, if v is a Vec, +is translated by the compiler into a call to a function called operator[]. For example, if v is a Vec<int>, then: ```cpp v[i] = 5; @@ -119,9 +119,9 @@ want to create a copy of the entire array! Let’s look at this more closely... ## 8.8 Exercise -Suppose we used the default version of the assignment operator and copy constructor in our Vec class. What +Suppose we used the default version of the assignment operator and copy constructor in our Vec<T> class. What would be the output of the following program? Assume all of the operations except the copy constructor behave as -they would with a std::vector. +they would with a std::vector<double>. ```cpp Vec v(4, 0.0); v[0] = 13.1; v[2] = 3.14;