![]() |
Blitz Bugs : |
From: N Smethurst (nick.smethurst_at_[hidden])
Date: 2004-09-14 13:17:53
Hello there
I discovered a bug in Array. When an array is initialised to zero size, the
begin() iterator does not equal the end() interator.
For example:
Array<float, 1> vec(0);
Array<float, 1>::iterator begin = vec.begin();
Array<float, 1>::iterator end = vec.end();
cout << "begin == end : " << (begin == end) << endl;
cout << "begin != end : " << (begin != end) << endl;
This gives:
begin == end : 0
begin != end : 1
However, when an array is created then resized, there is no bug:
Array<float, 1> vec;
vec.resize(0);
Array<float, 1>::iterator begin = vec.begin();
Array<float, 1>::iterator end = vec.end();
cout << "begin == end : " << (begin == end) << endl;
cout << "begin != end : " << (begin != end) << endl;
This gives:
begin == end : 1
begin != end : 0
The behaviour is the same with higher dimension arrays:
Array<float, 2> mat(0, 0);
// begin != end
Array<float, 2>::iterator begin = mat.begin();
Array<float, 2>::iterator end = mat.end();
Array<float, 2> mat1;
mat1.resize(0, 0);
// begin1 == end1
Array<float, 2>::iterator begin1 = mat1.begin();
Array<float, 2>::iterator end1 = mat1.end();
Regards
Nicholas