Re: shrink_to_fit and invalidation (C++0x)
On Nov 6, 6:42 am, Scott Meyers <NeverR...@aristeia.com> wrote:
Draft C++0x specifies that vector, string, and deque offer a shrink_to_fi=
t
member function. They all have more or less the same specification; =
this is
for vector:
shrink_to_fit is a non-binding request to reduce capacity() to size().
What are the effects, if any, on iterators, pointers, and references into=
a
container on which shrink_to_fit is invoked? I can't find any informat=
ion on
this point in the draft.
Thanks,
Scott
--
* C++ and Beyond: Meyers, Sutter, & Alexandrescu, Oct. 24-27 near Seattle
(http://cppandbeyond.com/)
* License my training materials for commercial (http://tinyurl.com/yfzvkp=
9) or
personal use (http://tinyurl.com/yl5ka5p).
Hi Scott
I tested the shrink_to_fit function in g++ 4.5.0. I think
there is no uniform behavior about iterators or pointers to
the elements which are shrunk:
#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
using namespace std;
vector<int> v(10, 0);
v.reserve(20);
cout << "the size of v is " << v.size() << '\n';
cout << "the capacity of v is " << v.capacity() << '\n';
vector<int>::iterator cit = v.begin() + 10; // points to element 11
*cit = -1;
v[11] = -2;
v.data()[12] = -3;
copy(v.begin(), v.end(), ostream_iterator<int>(cout, "\t"));
v.shrink_to_fit();
cout << "\nthe size of v is " << v.size() << '\n';
cout << "the capacity of v is " << v.capacity() << '\n';
cout << *cit << '\n';
cout << v[10] << '\n';
cout << v[11] << '\n';
cout << v.data()[12] << '\n';
return 0;
}
Output:
the size of v is 10
the capacity of v is 20
0 0 0 0 0 0 0 0 0 0
the size of v is 10
the capacity of v is 10
-1
0
135121
0
My two cents
-- Saeed Amrollahi