Article: Q158037
Product(s): Microsoft C Compiler
Version(s): 4.2,5.0,6.0
Operating System(s):
Keyword(s): kbcode kbVC420 kbVC500 kbVC600 kbDSupport
Last Modified: 17-APR-2002
-------------------------------------------------------------------------------
The information in this article applies to:
- The Standard C++ Library, used with:
- Microsoft Visual C++, 32-bit Enterprise Edition, versions 4.2, 5.0, 6.0
- Microsoft Visual C++, 32-bit Professional Edition, versions 4.2, 5.0, 6.0
- Microsoft Visual C++, 32-bit Learning Edition, version 6.0
-------------------------------------------------------------------------------
SUMMARY
=======
The sample code below illustrates how to use the stack::operator== STL function
in Visual C++.
MORE INFORMATION
================
Required Header
---------------
<stack>
Prototype
---------
template<class _TYPE, class _C, class _A>
bool stack::bool operator==(const stack<_TYPE, _C, _A>& _X) const;
NOTE: The class/parameter names in the prototype may not match the version in the
header file. Some have been modified to improve readability.
Description
-----------
The stack::operator== function returns true if both stacks have equal elements
arranged in the same sequence. The stack::operator== function always returns
false if the two stacks are of different size.
Sample Code
-----------
//////////////////////////////////////////////////////////////////////
//
// Compile options needed: /GX
//
// StackEqual.cpp : Illustrates how to use the stack::operator==
// function to determine if two stacks are equal.
//
// Functions:
//
// operator== : Returns true if both stacks are the same.
//
// Written by Derek Jamison
// of Microsoft Product Support Services,
// Copyright (c) 1996 Microsoft Corporation. All rights reserved.
//////////////////////////////////////////////////////////////////////
#pragma warning(disable:4786)
#include <stack>
#include <iostream>
using namespace std;
#if _MSC_VER > 1020 // if VC++ version is > 4.2
using namespace std; // std c++ libs implemented in std
#endif
typedef stack<double, deque<double, allocator<double> >,
allocator<double> > STACK_DOUBLE;
void main()
{
STACK_DOUBLE stack1,stack2;
// Add item 4.0 to Stack1.
cout << "stack1.push(4.0) s1=[4.0]" << endl;
stack1.push(4.0);
// Add item 3.0 to Stack1. Current Stack1 contains items 3.0 (top)
// 4.0 (bottom).
cout << "stack1.push(3.0) s1=[3.0 4.0]" << endl;
stack1.push(3.0);
// Add item 4.0 to Stack2.
cout << "stack2.push(4.0) s2=[4.0]" << endl;
stack2.push(4.0);
// Compare Stack1 and Stack2. Should return False.
cout << "stack1==stack2 is " <<
((stack1==stack2)? "True": "False") << endl << endl;
// Add item 6.0 to Stack2. Current Stack2 contains items 6.0 (top)
// 4.0 (bottom)
cout << "stack2.push(6.0) s2=[6.0 4.0]" << endl;
stack2.push(6.0);
// Compare Stack1 and Stack2. Should return False.
cout << "stack1==stack2 is " <<
((stack1==stack2)? "True": "False") << endl << endl;
// Keep adding item 8.0 to Stack2. Current Stack2 contains items
// 8.0 (top), 6.0 and 4.0 (bottom).
cout << "stack2.push(8.0) s2=[8.0 6.0 4.0]" << endl;
stack2.push(8.0);
// Compare Stack1 and Stack2. Should return False.
cout << "stack1==stack2 is " <<
((stack1==stack2)? "True": "False") << endl << endl;
// Delete the top item from Stack2. Current Stack2 contains items
// 6.0 (top) and 4.0 (bottom).
cout << "stack2.pop() s2=[6.0 4.0]" << endl;
stack2.pop();
// Delete another item from Stack2. Current Stack2 contains item 4.0.
cout << "stack2.pop() s2=[4.0]" << endl;
stack2.pop();
// Add item 3.0 to Stack2. Current Stack2 contains item 3.0 (top) and
// 4.0 (bottom).
cout << "stack2.push(3.0) s2=[3.0 4.0]" << endl;
stack2.push(3.0);
// Compare Stack2 and Stack2. Should return True.
cout << "stack1==stack2 is " <<
((stack1==stack2)? "True": "False") << endl << endl;
// Delete the top item from Stack2. Current Stack2 contains 4.0.
cout << "stack2.pop() s2=[4.0]" << endl;
stack2.pop();
// Delete another item from Stack2. Stack2 should be empty.
cout << "stack2.pop() s2=[]" << endl;
stack2.pop();
// Push item 8.0 to Stack2.
cout << "stack2.push(8.0) s2=[8.0]" << endl;
stack2.push(8.0);
// Compare Stack1 and Stack2. Should return False.
cout << "stack1==stack2 is " <<
((stack1==stack2)? "True": "False") << endl << endl;
}
Program Output
--------------
stack1.push(4.0) s1=[4.0]
stack1.push(3.0) s1=[3.0 4.0]
stack2.push(4.0) s2=[4.0]
stack1==stack2 is False
stack2.push(6.0) s2=[6.0 4.0]
stack1==stack2 is False
stack2.push(8.0) s2=[8.0 6.0 4.0]
stack1==stack2 is False
stack2.pop() s2=[6.0 4.0]
stack2.pop() s2=[4.0]
stack2.push(3.0) s2=[3.0 4.0]
stack1==stack2 is True
stack2.pop() s2=[4.0]
stack2.pop() s2=[]
stack2.push(8.0) s2=[8.0]
stack1==stack2 is False
REFERENCES
==========
Visual C++ Books On Line: Visual C++ Books:C/C++:Standard C++ Library Reference.
Additional query words: STL STLSample operator==
======================================================================
Keywords : kbcode kbVC420 kbVC500 kbVC600 kbDSupport
Technology : kbVCsearch kbAudDeveloper kbVCLibrary
Version : :4.2,5.0,6.0
Issue type : kbinfo
=============================================================================