C++ Tutorial/vector/vector capacity

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Demonstrating the STL vector capacity

<source lang="cpp">#include <iostream>

  1. include <cassert>
  2. include <vector>

using namespace std; int main() {

 int N = 10000; // size of vectors
 vector<int> vector1, vector2;
 for (int k = 0; k != N; ++k) {
   vector<int>::size_type cap = vector1.capacity();
   vector1.push_back(k);
   if (vector1.capacity() != cap)
     cout << "k: " << k << ", new capacity: " << vector1.capacity() << endl;
 }
 return 0;

}</source>

k: 0, new capacity: 1
k: 1, new capacity: 2
k: 2, new capacity: 4
k: 4, new capacity: 8
k: 8, new capacity: 16
k: 16, new capacity: 32
k: 32, new capacity: 64
k: 64, new capacity: 128
k: 128, new capacity: 256
k: 256, new capacity: 512
k: 512, new capacity: 1024
k: 1024, new capacity: 2048
k: 2048, new capacity: 4096
k: 4096, new capacity: 8192
k: 8192, new capacity: 16384

Demonstrating the STL vector capacity and reserve functions

<source lang="cpp">#include <iostream>

  1. include <cassert>
  2. include <vector>

using namespace std; int main() {

 int N = 10000; // size of vectors
 vector<int> vector1, vector2;
 for (int k = 0; k != N; ++k) {
   vector<int>::size_type cap = vector1.capacity();
   vector1.push_back(k);
   if (vector1.capacity() != cap)
     cout << "k: " << k << ", new capacity: " << vector1.capacity() << endl;
 }
 vector2.reserve(N);
 for (int k = 0; k != N; ++k) {
   vector<int>::size_type cap = vector2.capacity();
   vector2.push_back(k);
   if (vector2.capacity() != cap)
     cout << "k: " << k << ", new capacity: " << vector2.capacity() << "\n";
 }
 return 0;

}</source>

k: 0, new capacity: 1
k: 1, new capacity: 2
k: 2, new capacity: 4
k: 4, new capacity: 8
k: 8, new capacity: 16
k: 16, new capacity: 32
k: 32, new capacity: 64
k: 64, new capacity: 128
k: 128, new capacity: 256
k: 256, new capacity: 512
k: 512, new capacity: 1024
k: 1024, new capacity: 2048
k: 2048, new capacity: 4096
k: 4096, new capacity: 8192
k: 8192, new capacity: 16384

make a big vector and then deallocate all its memory

<source lang="cpp">#include <algorithm>

  1. include <iostream>
  2. include <vector>

using namespace std; int main( ) {

  // make a big vector and then deallocate all its memory
  const int big_size = 10000;
  vector<double> v( big_size );
  cout << "Before clearing, the capacity of the vector is "
     << v.capacity() << " and its size is " << v.size();
  v.clear();
  cout << "\nAfter clearing, the capacity of the vector is "
     << v.capacity() << " and its size is " << v.size();
  vector<double>().swap( v );
  cout << "\nAfter swapping, the capacity of the vector is "
     << v.capacity() << " and its size is " << v.size();

}</source>

make a big vector and then minimize its memory

<source lang="cpp">#include <algorithm>

  1. include <iostream>
  2. include <vector>

using namespace std; int main( ) {

  const int big_size = 10000;
  vector<double> v( big_size );
  // make a big vector and then minimize its memory
  v.assign( big_size, 3.33 );
  cout << "\n\nBefore resizing, the capacity of the vector is "
     << v.capacity() << " and its size is " << v.size();
  v.resize( 1 );
  cout << "\nAfter resizing, the capacity of the vector is "
     << v.capacity() << " and its size is " << v.size();
  vector<double>( v ).swap( v );
  cout << "\nAfter swapping, the capacity of the vector is "
     << v.capacity() << " and its size is " << v.size();

}</source>

make the vector as large as possible without reallocating

<source lang="cpp">#include <algorithm>

  1. include <iostream>
  2. include <vector>

using namespace std; template <class T> void print(T& c){

  for( typename T::iterator i = c.begin(); i != c.end(); i++ ){
     std::cout << *i << endl;
  }

} int main( ) {

  vector<double> v( 5, 2.78 );
  v[2] = 0.0;
  // make the vector as large as possible without reallocating
  v.resize( v.capacity(), 2.78 );

}</source>