| this invalidates the pointer that c_str returns. |
rope operator+(const rope& L, const rope& R) | Returns a new rope consisting of the concatenation of L and R. This is a global function, not a member function. |
rope& operator+=(rope& L, const rope& R) | Modifies L by appending R, and returns L. This is a global function, not a member function. |
rope operator+(const rope& L, const charT* s) | Returns a new rope consisting of the concatenation of L and all of the characters from s up to, but not including, the first null character. This is a global function, not a member function. |
rope& operator+=(rope& L, const charT* s) | Modifies L by appending the characters from s up to, but not including, the first null character. The return value is L. This is a global function, not a member function. |
rope operator+(const rope& L, charT c) | Returns a new rope consisting of L with the character c appended to it. This is a global function, not a member function. |
rope& operator+=(rope& L, charT c) | Modifies L by appending the character c. This is a global function, not a member function. |
ostream& operator<<(ostream& os, rope x) | Outputs x to the stream os. This is a global function, not a member function. |
Notes [1] For a detailed discussion of the rope data structure, see H.-J. Boehm, R. Atkinson, and M. Plass, 'Ropes: An Alternative to Strings', Software Practice and Experience 25(12):1315, 1995.
[2] Since the value type is usually either char or wchar_t, the library introduces two abbreviations: crope is a typedef for rope<char>, and wrope is a typedef for rope<wchar_t>.
[3] Rope::reference is not value_type&, but a proxy type. In fact, reference is a typedef for the nested class charT_ref_proxy. Const_reference, however, is simply const value_type&. Similarly, const_pointer is just const value_type* but pointer is a proxy type. If r is an object of type reference, then &r is of type pointer.
[4] Note that the return value of substr is conceptually a distinct rope: the two rope s may share storage, but this is a hidden implementation detail. If you modify a rope returned by substr, this will not change the value of the original rope.
[5] The final const qualifier in the member function c_str() is conceptually slightly inaccurate in the interest of conformance to the basic_string interface in the draft C++ standard; the rope is updated to cache the converted string.
[6] Concurrent calls to c_str() are allowed; the cache is updated atomically.
See also Random Access Container, Sequence, vector, sequence_buffer
Categories: containers, adaptors
Component type: type
Description A stack is an adaptor that provides a restricted subset of Container functionality: it provides insertion, removal, and inspection of the element at the top of the stack. Stack is a 'last in first out' (LIFO) data structure: the element at the top of a stack is the one that was most recently added. [1] Stack does not allow iteration through its elements. [2]
Stack is a container adaptor, meaning that it is implemented on top of some underlying container type. By default that underlying type is deque, but a different type may be selected explicitly.
Example int main() {
stack<int> S;
S.push(8);
S.push(7);
S.push(4);
assert(S.size() == 3);
assert(S.top() == 4);
S.pop();