Linux libstdc++:
clear just calls the equivalent of erase(begin, end). No memory freeing.
resize first checks if the new size is smaller than the old size. If yes (our case), than the equivalent of erase(begin, begin + newSize) is called. No memory freeing.
At least on Linux resize(0) is a bit slower than clear.
Maybe just run the following code on some systems:
Code:
#include <vector>
#include <iostream>
typedef std::vector<int> VI;
int main()
{
VI vi;
for(int i = 0; i < 10; ++i)
vi.push_back(i);
std::cout << "before clear " << vi.capacity() << " " << vi.size() << "\n";
vi.clear();
std::cout << "after clear " << vi.capacity() << " " << vi.size() << "\n";
VI vi2;
for(int i = 0; i < 10; ++i)
vi2.push_back(i);
std::cout << "before resize(0) " << vi2.capacity() << " " << vi2.size() << "\n";
vi2.resize(0);
std::cout << "after resize(0) " << vi2.capacity() << " " << vi2.size() << "\n";
return 0;
}
Result for libstdc++:
Code:
before clear 16 10
after clear 16 0
before resize(0) 16 10
after resize(0) 16 0