C++/STL Basics/container as parameter
Содержание
Function with stack as parameter
#include <iostream>
using std::cout;
using std::endl;
#include <stack> // stack adapter definition
#include <vector> // vector class-template definition
#include <list> // list class-template definition
template< typename T > void pushElements( T &stackRef );
template< typename T > void popElements( T &stackRef );
int main()
{
std::stack< int > intDequeStack;
cout << "Pushing onto intDequeStack: ";
pushElements( intDequeStack );
cout << endl << endl;
cout << "Popping from intDequeStack: ";
popElements( intDequeStack );
cout << endl;
return 0;
}
template< typename T > void pushElements( T &stackRef )
{
for ( int i = 0; i < 10; i++ )
{
stackRef.push( i );
cout << stackRef.top() << " ";
}
}
template< typename T > void popElements( T &stackRef )
{
while ( !stackRef.empty() )
{
cout << stackRef.top() << " ";
stackRef.pop();
}
}
/*
Pushing onto intDequeStack: 0 1 2 3 4 5 6 7 8 9
Popping from intDequeStack: 9 8 7 6 5 4 3 2 1 0
*/
Function with vector as the parameter
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
template < typename T > void printVector( const vector< T > &integers2 );
int main()
{
int array[ 6 ] = { 1, 2, 3, 4, 5, 6 }; // initialize array
vector< int > integers; // create vector of ints
integers.push_back( 2 );
integers.push_back( 3 );
integers.push_back( 4 );
printVector( integers );
cout << endl;
return 0;
}
template < typename T > void printVector( const vector< T > &integers2 ){
typename vector< T >::const_iterator constIterator;
for ( constIterator = integers2.begin();
constIterator != integers2.end(); ++constIterator )
cout << *constIterator << " ";
}
/*
2 3 4
*/
Use list as the function parameter
#include <iostream>
using std::cout;
using std::endl;
#include <list> // list class-template definition
#include <algorithm> // copy algorithm
#include <iterator> // ostream_iterator
template < typename T > void printList( const std::list< T > &listRef );
int main()
{
int array[ 4 ] = { 2, 6, 4, 8 };
std::list< int > values; // create list of ints
std::list< int > otherValues; // create list of ints
// insert items in values
values.push_front( 1 );
values.push_front( 2 );
values.push_back( 4 );
values.push_back( 3 );
cout << "values contains: ";
printList( values );
cout << endl;
return 0;
}
template < typename T > void printList( const std::list< T > &listRef )
{
std::ostream_iterator< T > output( cout, " " );
std::copy( listRef.begin(), listRef.end(), output );
}
/*
values contains: 2 1 4 3
*/
Using template functions to output array of different types
#include <iostream>
using std::cout;
using std::endl;
template< typename T >
void printArray( const T *array, int count )
{
for ( int i = 0; i < count; i++ )
cout << array[ i ] << " ";
cout << endl;
}
int main()
{
const int aCount = 5;
const int bCount = 7;
const int cCount = 6;
int a[ aCount ] = { 1, 2, 3, 4, 5 };
double b[ bCount ] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };
char c[ cCount ] = "HELLO";
printArray( a, aCount );
printArray( b, bCount );
printArray( c, cCount );
return 0;
}
/*
1 2 3 4 5
1.1 2.2 3.3 4.4 5.5 6.6 7.7
H E L L O
*/