This is a continuation from previous tutorial, compiled using VC++7.0/.Net, win32 empty console mode application. g++ examples given at the end of this Module. The source code for this tutorial is available in C++ STL Container source code.
|
|
27.5.2 The deque
|
// a simple deque example
#include <iostream>
#include <deque>
using namespace std;
int main()
{
// deque container for floating-point elements declaration
deque<float> elem, elem1;
// insert the elements each at the front
cout<<"push_front()\n";
for(int i=1; i<=10; ++i)
// insert at the front
elem.push_front(i*(1.2));
// print all elements separated by a space
for(i=0; i<elem.size(); ++i)
cout<<elem[i]<<' ';
cout<<endl;
// insert the elements each at the back
cout<<"\npush_back()\n";
// insert at the back
for(i=1; i<=10; ++i)
elem1.push_back(i*(1.2));
// print all elements separated by a space
for(i=0; i<elem1.size(); ++i)
cout<<elem1[i]<<' ';
cout<<endl;
return 0;
}

|
Operator |
Description |
|
operator!= |
Tests if the deque object on the left side of the operator is not equal to the deque object on the right side. |
|
operator< |
Tests if the deque object on the left side of the operator is less than the deque object on the right side. |
|
operator<= |
Tests if the deque object on the left side of the operator is less than or equal to the deque object on the right side. |
|
operator== |
Tests if the deque object on the left side of the operator is equal to the deque object on the right side. |
|
operator> |
Tests if the deque object on the left side of the operator is greater than the deque object on the right side. |
|
operator>= |
Tests if the deque object on the left side of the operator is greater than or equal to the deque object on the right side. |
|
Table 27.11 |
|
|
Class |
Description |
|
deque |
A template class of sequence containers that arrange elements of a given type in a linear arrangement and, like vectors, allow fast random access to any element and efficient insertion and deletion at the back of the container. |
|
Table 27.12 |
|
The STL sequence container deque arranges elements of a given type in a linear arrangement and, like vectors, allow fast random access to any element and efficient insertion and deletion at the back of the container.
However, unlike a vector, the deque class also supports efficient insertion and deletion at the front of the container.
|
Typedef |
Description |
|
allocator_type |
A type that represents the allocator class for the deque object. |
|
const_iterator |
A type that provides a random-access iterator that can access and read a const element in the deque. |
|
const_pointer |
A type that provides a pointer to a const element in a deque. |
|
const_reference |
A type that provides a reference to a const element stored in a deque for reading and performing const operations. |
|
const_reverse_iterator |
A type that provides a random-access iterator that can read any const element in the deque. |
|
difference_type |
A type that provides the difference between two iterators that refer to elements within the same deque. |
|
iterator |
A type that provides a random-access iterator that can read or modify any element in a deque. |
|
pointer |
A type that provides a pointer to an element in a deque. |
|
reference |
A type that provides a reference to an element stored in a deque. |
|
reverse_iterator |
A type that provides a random-access iterator that can read or modify an element in a reversed deque. |
|
size_type |
A type that counts the number of elements in a deque. |
|
value_type |
A type that represents the data type stored in a deque. |
|
Table 27.13 |
|
|
Member function |
Description |
|
assign() |
Erases elements from a deque and copies a new set of elements to the target deque. |
|
at() |
Returns a reference to the element at a specified location in the deque. |
|
back() |
Returns a reference to the last element of the deque. |
|
begin() |
Returns an iterator addressing the first element in the deque. |
|
clear() |
Erases all the elements of a deque. |
|
deque() |
deque constructor, constructs a deque of a specific size or with elements of a specific value or with a specific allocator or as a copy of all or part of some other deque. |
|
empty() |
Tests if a deque is empty. |
|
end() |
Returns an iterator that addresses the location succeeding the last element in a deque. |
|
erase() |
Removes an element or a range of elements in a deque from specified positions. |
|
front() |
Returns a reference to the first element in a deque. |
|
get_allocator() |
Returns a copy of the allocator object used to construct the deque. |
|
insert() |
Inserts an element or a number of elements or a range of elements into the deque at a specified position. |
|
max_size() |
Returns the maximum length of the deque. |
|
pop_back() |
Deletes the element at the end of the deque. |
|
pop_front() |
Deletes the element at the beginning of the deque. |
|
push_back() |
Adds an element to the end of the deque. |
|
push_front() |
Adds an element to the beginning of the deque. |
|
rbegin() |
Returns an iterator to the first element in a reversed deque. |
|
rend() |
Returns an iterator that point just beyond the last element in a reversed deque. |
|
resize() |
Specifies a new size for a deque. |
|
size() |
Returns the number of elements in the deque. |
|
swap() |
Exchanges the elements of two deques. |
|
Table 27.14 |
|
|
Operator |
Description |
|
operator[ ] |
Returns a reference to the deque element at a specified position. |
|
Table 27.15 |
|
deque constructor, constructs a deque of a specific size or with elements of a specific value or with a specific allocator or as a copy of all or part of some other deque.
All constructors store an allocator object and initialize the deque.
None of the constructors perform any interim reallocations.
// deque, constructors
#include <deque>
#include <iostream>
using namespace std;
int main()
{
deque <int>::iterator deq0Iter, deq1Iter, deq2Iter, deq3Iter, deq4Iter, deq5Iter, deq6Iter;
// create an empty deque deq0
deque <int> deq0;
// create a deque deq1 with 10 elements of default value 0
deque <int> deq1(10);
// create a deque deq2 with 7 elements of value 10
deque <int> deq2(7, 10);
// create a deque deq3 with 4 elements of value 2 and with the allocator of deque deq2
deque <int> deq3(4, 2, deq2.get_allocator());
// create a copy, deque deq4, of deque deq2
deque <int> deq4(deq2);
// deque deq5 a copy of the deq4[_First, _Last) range
deq4Iter = deq4.begin();
deq4Iter++;
deq4Iter++;
deq4Iter++;
deque <int> deq5(deq4.begin(), deq4Iter);
// create a deque deq6 by copying the range deq4[_First, _Last) and the allocator of deque deq2
deq4Iter = deq4.begin();
deq4Iter++;
deq4Iter++;
deq4Iter++;
deque <int> deq6(deq4.begin(), deq4Iter, deq2.get_allocator());
// ------------------------------------
cout<<"Operation: deque <int> deq0\n";
cout<<"deq0 data: ";
for(deq0Iter = deq0.begin(); deq0Iter != deq0.end(); deq0Iter++)
cout<<*deq0Iter<<" ";
cout<<endl;
cout<<"\nOperation: deque <int> deq1(10)\n";
cout<<"deq1 data: ";
for(deq1Iter = deq1.begin(); deq1Iter != deq1.end(); deq1Iter++)
cout<<*deq1Iter<<" ";
cout<<endl;
cout<<"\nOperation: deque <int> deq2(7, 3)\n";
cout<<"deq2 data: ";
for(deq2Iter = deq2.begin(); deq2Iter != deq2.end(); deq2Iter++)
cout<<*deq2Iter<<" ";
cout<<endl;
cout<<"\nOperation: deque <int> deq3(4, 2, deq2.get_allocator())\n";
cout<<"deq3 data: ";
for(deq3Iter = deq3.begin(); deq3Iter != deq3.end(); deq3Iter++)
cout<<*deq3Iter<<" ";
cout<<endl;
cout<<"\nOperation: deque <int> deq4(deq2);\n";
cout<<"deq4 data: ";
for(deq4Iter = deq4.begin(); deq4Iter != deq4.end(); deq4Iter++)
cout<<*deq4Iter<<" ";
cout<<endl;
cout<<"\nOperation1: deq4Iter++...\n";
cout<<"Operation2: deque <int> deq5(deq4.begin(), deq4Iter)\n";
cout<<"deq5 data: ";
for(deq5Iter = deq5.begin(); deq5Iter != deq5.end(); deq5Iter++)
cout << *deq5Iter<<" ";
cout << endl;
cout<<"\nOperation1: deq4Iter = deq4.begin() and deq4Iter++...\n";
cout<<"Operation2: deque <int> deq6(deq4.begin(), \n"
" deq4Iter, deq2.get_allocator())\n";
cout<<"deq6 data: ";
for(deq6Iter = deq6.begin(); deq6Iter != deq6.end(); deq6Iter++)
cout<<*deq6Iter<<" ";
cout<<endl;
return 0;
}
------------------------------------------------------------------------------------------------

The following is a program examples compiled using g++. Well, it seems that compiling STL programs using g++ is smoother because if you use old constructs that is not based on the standard, in your program, g++ will prompt you!
// *******vector.cp*********
// vector constructors
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector <int>::iterator vec0Iter, vec1Iter, vec2Iter, vec3Iter, vec4Iter, vec5Iter;
// create an empty vector vec0
vector <int> vec0;
// create a vector vec1 with 10 elements of default value 0
vector <int> vec1(10);
// create a vector vec2 with 7 elements of value 13
vector <int> vec2(7, 13);
// create a vector vec3 with 5 elements of value 3 and with the allocator of vector vec2
vector <int> vec3(5, 3, vec2.get_allocator());
// vector vec4, a copy of vector vec2
vector <int> vec4(vec2);
// create a vector vec5 by copying the range of vec4[_First, _Last)
vector <int> vec5(vec4.begin() + 1, vec4.begin() + 3);
cout<<"Operation: vector <int> vec0\n";
cout<<"vec0 data: ";
for(vec0Iter = vec0.begin(); vec0Iter != vec0.end(); vec0Iter++)
cout<<" "<<*vec0Iter;
cout<<endl;
cout<<"\nOperation: vector <int> vec1(10)\n";
cout<<"vec1 data: ";
for(vec1Iter = vec1.begin(); vec1Iter != vec1.end(); vec1Iter++)
cout<<" "<<*vec1Iter;
cout<<endl;
cout<<"\nOperation: vector <int> vec2(7, 13)\n";
cout<<"vec2 data: ";
for(vec2Iter = vec2.begin(); vec2Iter != vec2.end(); vec2Iter++)
cout<<" "<<*vec2Iter;
cout<<endl;
cout<<"\nOperation: vector <int> vec3(5, 3, vec2.get_allocator())\n";
cout<<"vec3 data: ";
for(vec3Iter = vec3.begin(); vec3Iter != vec3.end(); vec3Iter++)
cout<<" "<<*vec3Iter;
cout<<endl;
cout<<"\nOperation: vector <int> vec4(vec2)\n";
cout<<"vec4 data: ";
for(vec4Iter = vec4.begin(); vec4Iter != vec4.end(); vec4Iter++)
cout<<" "<<*vec4Iter;
cout<<endl;
cout<<"\nOperation: vector <int> vec5(vec4.begin()+1, vec4.begin()+3)\n";
cout<<"vec5 data: ";
for(vec5Iter = vec5.begin(); vec5Iter != vec5.end(); vec5Iter++)
cout<<" "<<*vec5Iter;
cout<<endl;
return 0;
}
[bodo@bakawali ~]$ g++ vector.cpp -o vector
[bodo@bakawali ~]$ ./vector
Operation: vector <int> vec0
vec0 data:
Operation: vector <int> vec1(10)
vec1 data: 0 0 0 0 0 0 0 0 0 0
Operation: vector <int> vec2(7, 13)
vec2 data: 13 13 13 13 13 13 13
Operation: vector <int> vec3(5, 3, vec2.get_allocator())
vec3 data: 3 3 3 3 3
Operation: vector <int> vec4(vec2)
vec4 data: 13 13 13 13 13 13 13
Operation: vector <int> vec5(vec4.begin()+1, vec4.begin()+3)
vec5 data: 13 13
// ********deque.cpp*********
// deque, constructors
#include <deque>
#include <iostream>
using namespace std;
int main()
{
deque <int>::iterator deq0Iter, deq1Iter, deq2Iter, deq3Iter, deq4Iter, deq5Iter, deq6Iter;
// create an empty deque deq0
deque <int> deq0;
// create a deque deq1 with 10 elements of default value 0
deque <int> deq1(10);
// create a deque deq2 with 7 elements of value 10
deque <int> deq2(7, 10);
// create a deque deq3 with 4 elements of value 2 and with the allocator of deque deq2
deque <int> deq3(4, 2, deq2.get_allocator());
// create a copy, deque deq4, of deque deq2
deque <int> deq4(deq2);
// deque deq5 a copy of the deq4[_First, _Last) range
deq4Iter = deq4.begin();
deq4Iter++;
deq4Iter++;
deq4Iter++;
deque <int> deq5(deq4.begin(), deq4Iter);
// create a deque deq6 by copying the range deq4[_First, _Last) and the allocator of deque deq2
deq4Iter = deq4.begin();
deq4Iter++;
deq4Iter++;
deq4Iter++;
deque <int> deq6(deq4.begin(), deq4Iter, deq2.get_allocator());
// ------------------------------------
cout<<"Operation: deque <int> deq0\n";
cout<<"deq0 data: ";
for(deq0Iter = deq0.begin(); deq0Iter != deq0.end(); deq0Iter++)
cout<<*deq0Iter<<" ";
cout<<endl;
cout<<"\nOperation: deque <int> deq1(10)\n";
cout<<"deq1 data: ";
for(deq1Iter = deq1.begin(); deq1Iter != deq1.end(); deq1Iter++)
cout<<*deq1Iter<<" ";
cout<<endl;
cout<<"\nOperation: deque <int> deq2(7, 3)\n";
cout<<"deq2 data: ";
for(deq2Iter = deq2.begin(); deq2Iter != deq2.end(); deq2Iter++)
cout<<*deq2Iter<<" ";
cout<<endl;
cout<<"\nOperation: deque <int> deq3(4, 2, deq2.get_allocator())\n";
cout<<"deq3 data: ";
for(deq3Iter = deq3.begin(); deq3Iter != deq3.end(); deq3Iter++)
cout<<*deq3Iter<<" ";
cout<<endl;
cout<<"\nOperation: deque <int> deq4(deq2);\n";
cout<<"deq4 data: ";
for(deq4Iter = deq4.begin(); deq4Iter != deq4.end(); deq4Iter++)
cout<<*deq4Iter<<" ";
cout<<endl;
cout<<"\nOperation1: deq4Iter++...\n";
cout<<"Operation2: deque <int> deq5(deq4.begin(), deq4Iter)\n";
cout<<"deq5 data: ";
for(deq5Iter = deq5.begin(); deq5Iter != deq5.end(); deq5Iter++)
cout << *deq5Iter<<" ";
cout << endl;
cout<<"\nOperation1: deq4Iter = deq4.begin() and deq4Iter++...\n";
cout<<"Operation2: deque <int> deq6(deq4.begin(), \n"
" deq4Iter, deq2.get_allocator())\n";
cout<<"deq6 data: ";
for(deq6Iter = deq6.begin(); deq6Iter != deq6.end(); deq6Iter++)
cout<<*deq6Iter<<" ";
cout<<endl;
return 0;
}
[bodo@bakawali ~]$ g++ deque.cpp -o deque
[bodo@bakawali ~]$ ./deque
Operation: deque <int> deq0
deq0 data:
Operation: deque <int> deq1(10)
deq1 data: 0 0 0 0 0 0 0 0 0 0
Operation: deque <int> deq2(7, 3)
deq2 data: 10 10 10 10 10 10 10
Operation: deque <int> deq3(4, 2, deq2.get_allocator())
deq3 data: 2 2 2 2
Operation: deque <int> deq4(deq2);
deq4 data: 10 10 10 10 10 10 10
Operation1: deq4Iter++...
Operation2: deque <int> deq5(deq4.begin(), deq4Iter)
deq5 data: 10 10 10
Operation1: deq4Iter = deq4.begin() and deq4Iter++...
Operation2: deque <int> deq6(deq4.begin(),
deq4Iter, deq2.get_allocator())
deq6 data: 10 10 10
----------------------------------------------------End of deque----------------------------------------------
---www.tenouk.com---
The source code for this tutorial is available in C++ STL Container source code.
A complete C & C++ Standard Library documentation that includes STL.
Check the best selling C / C++ books at Amazon.com.
|
Search books and compare the prices. Get the cheapest C/C++ books from the cheap! Not just C/C++ books... |
|
|
|