Teacher Teacher - STL Source Code Analysis - Question in the book
Foreword
I am watching the STL source code in Houjie. Use in the case. The code is as follows: Status 8: __ STL_MEMBER_TEMPLATES
#include
Using namespace std;
Class alloc {
}
Template
Class vector {
PUBLIC:
Typedef t value_type;
TypeDef value_type * iterator;
Template
Void Insert (Iterator Position, I First, I Last)
{
Cout << "INSERT () << endl;
}
}
int main ()
{
INT IA [5] = {0, 1, 2, 3, 4};
Vector
Vector
X.insert (ITE, IA, IA 5); // INSERT ()
}
There is an error in the code in the code, and when compiling running, it must be replaced with the iTerator and Vector in the Iterator and Vector declarations in the STL library. There is also a mainframe without a return value. The replacement code is as follows:
Replace the code
#include
#include
Using namespace std;
int main ()
{
INT IA [5] = {0, 1, 2, 3, 4};
Vector
Vector
X.insert (ITE, IA, IA 5); // INSERT ()
Retrun 0;
}
The reason is that ITE is not initialized when defining ITE. When calling this INSERT function (Of course, call INSERT (int value) will not be wrong, it does not use ITE), it thinks it is correctly initialized ITE (ITE is invalid at this time, because there is no initialization), so when it comes to ITE Illegal access occurs when the memory is stored. When you have correct initialization when you declare the Vector ITE, it will not be wrong.
Vector
Writing this article may have a small subject masterpiece, and the error here is not an initialization pointer, but it does not have illegal access because it does not use ITE. But when I actually applied, I must pay attention to initialization. Don't think that Teacher Hou teacher is written, they will copy it, then you will regret it. The author is just a semantic, or it may be that I understand the error. In short, this article is for reference only. If there is a mistake, he is looking forward to the letter, and it is grateful.
Acknowledgments!
Yuan Kai
2001-11-09