C++/Vector/vector size

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

Computing the sum with template iterators

<source lang="cpp">

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

using std::cout; using std::endl; using std::vector; template <typename Iter> double vectorSum(Iter begin, Iter end) {

 double sum = 0.0;
 while( begin != end )
   sum += *begin++;
 return sum;        

} int main() {

 vector<int> sunny;
 sunny.push_back(7);  
 sunny.push_back(12);  
 sunny.push_back(15);
 cout << sunny.size() << " months on record" << endl; 
 cout << "vectorSum number of sunny days: "; 
 cout << vectorSum(sunny.begin(), sunny.end()) << endl; 
 return 0;

} /* 3 months on record vectorSum number of sunny days: 34

*/        
   
 </source>


Make vector large enough to hold all value

<source lang="cpp">

  1. include <algorithm>
  2. include <functional>
  3. include <iomanip>
  4. include <iostream>
  5. include <list>
  6. include <string>
  7. include <vector>

using namespace std; class PC {

  public:
  enum part { keyboard, mouse, monitor };
  PC( part a_part = PC::keyboard, int id = 0 );
  bool operator<( const PC& rhs ) const;
  void print() const;
  private:
  part part_;
  int id_;

}; inline PC::PC( part a_part, int id ) : part_( a_part ), id_( id ){} inline bool PC::operator<( const PC& rhs ) const{

  return id_ < rhs.id_; 

} void PC::print() const {

  string component;
  if( part_ == keyboard )
     component = "keyboard";
  else if( part_ == mouse )
     component = "mouse";
  else
     component = "monitor";
  cout << "ID: " << setw( 8 ) << left << id_ << " PC: " << component << endl;

} int main( ) {

  list<PC> listA;
  listA.push_back( PC( PC::keyboard, 3 ) );
  listA.push_back( PC( PC::mouse, 1 ) );
  listA.push_back( PC( PC::monitor, 9 ) );
  listA.push_back( PC( PC::keyboard, 2 ) );
  listA.push_back( PC( PC::monitor, 8 ) );
  list<PC> inspector_B( listA );
  inspector_B.front() = PC( PC::mouse, 6 );
  inspector_B.back() = PC( PC::monitor, 1 );
  // must sort before using set algorithms
  listA.sort();
  inspector_B.sort();
  vector<PC> result;
  result.resize( listA.size() + inspector_B.size() );

}


 </source>


vector: max_size(), size(), capacity()

<source lang="cpp">

/* The following code example is taken from the book

* "The C++ Standard Library - A Tutorial and Reference"
* by Nicolai M. Josuttis, Addison-Wesley, 1999
*
* (C) Copyright Nicolai M. Josuttis 1999.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
  1. include <iostream>
  2. include <vector>
  3. include <string>
  4. include <algorithm>
  5. include <iterator>

using namespace std; int main() {

   // create empty vector for strings
   vector<string> sentence;
   // reserve memory for five elements to avoid reallocation
   sentence.reserve(5);
   // append some elements
   sentence.push_back("Hello,");
   sentence.push_back("how");
   sentence.push_back("are");
   sentence.push_back("you");
   sentence.push_back("?");
   // print elements separated with spaces
   copy (sentence.begin(), sentence.end(),
         ostream_iterator<string>(cout," "));
   cout << endl;
   cout << "  max_size(): " << sentence.max_size() << endl;
   cout << "  size():     " << sentence.size()     << endl;
   cout << "  capacity(): " << sentence.capacity() << endl;

} /* Hello, how are you ?

 max_size(): 1073741823
 size():     5
 capacity(): 5
*/
       
   
 </source>


vector size before and after elements insertion

<source lang="cpp">

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

using namespace std; int main() {

 vector<char> v(10); // create a vector of length 10
 cout << "Size = " << v.size() << endl;
 for(int i=0; i<10; i++)
    v[i] = i + "a";
 cout << "Current Contents:\n";
 for(int i=0; i<v.size(); i++) cout << v[i] << " ";
 cout << "\n\n";
 cout << "Expanding vector\n";
 for(int i=0; i<10; i++)
    v.push_back(i + 10 + "a");
 cout << "Size now = " << v.size() << endl;
 cout << "Current contents:\n";
 for(int i=0; i<v.size(); i++)
     cout << v[i] << " ";
 cout << "\n\n";
 return 0;

} /* Size = 10 Current Contents: a b c d e f g h i j Expanding vector Size now = 20 Current contents: a b c d e f g h i j k l m n o p q r s t

*/
       
   
 </source>