⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapter4-21.cpp

📁 C++STL程序员开发指南
💻 CPP
字号:
//【实例4-21:利用指针技术对容器进行赋值操作实例】
#include "stl.h"
#include <iostream.h>
using namespace std;
// Let's say you want to put pointers to X into multiple STLcontainers.
class X 
{
public:
    X(int i) : i_(i) { ; }
    X(const X& x) : i_(x.i_) { }
    ~X() { }
    X& operator= (const X& x) { i_ = x.i_; }
    int operator()() const { return i_; }
private:
    int i_;
};
bool operator== (const X& x1, const X& x2) { return x1() == x2(); }
bool operator< (const X& x1, const X& x2) {   return x1() < x2(); }
// Define a simple wrapper class to put into STLcontainers. This one simple wraps X.
class XPtrWrapper 
{
public:
    XPtrWrapper(X* x = 0) : x_(x) { }
    XPtrWrapper(const XPtrWrapper& xw) : x_(xw.x_) { }
    ~XPtrWrapper() { }
    //XPtrWrapper& operator= (const XPtrWrapper& xw) { x_ = xw.x_; }
    const X* operator() () const { return x_; }
    X* operator() () { return x_; }
private:
    X* x_;
};
bool operator== (const XPtrWrapper& xw1, const XPtrWrapper& xw2) 
{   return (xw1.operator()() && xw2.operator()()) ? *xw1() == *xw2() : false;  }
bool operator< (const XPtrWrapper& xw1, const XPtrWrapper& xw2) 
{    return (xw1() && xw2()) ? *xw1() < *xw2() : false;  }
void print(const XPtrWrapper& xw) 
{    cout << " " << (*xw())();  }
int main(int, char*[]) 
{   XPtrWrapper bucket[5];
    for(int i = 0; i < 5; ++i) { bucket[i] = XPtrWrapper(new X(i * i)); }
    random_shuffle(bucket, bucket + 5);
    list<XPtrWrapper> list1;
    copy(bucket, bucket + 5, back_insert_iterator<list<XPtrWrapper> > (list1));
    cout << "List of XPtrWrapper: (";
    for_each(list1.begin(), list1.end(), print);
    cout << ")" << endl;
    // now put these XPtrWrappers into a set. Note that I can use greater since I've defined operator> for it.
    set<XPtrWrapper, greater<XPtrWrapper> > set1;
/*    copy(list1.begin(), list1.end(), 
        insert_iterator<set<XPtrWrapper, greater<XPtrWrapper> > >(set1, set1.begin()) );
*/
    cout << "Set of XPtrWrapper : [";
    for_each(set1.begin(), set1.end(), print);
    cout << "]" << endl;
    // now put these integers into a deque. 
    deque<XPtrWrapper> deque1;
    copy(list1.begin(), list1.end(), back_insert_iterator<deque<XPtrWrapper> > (deque1) );
    cout << "Deque of XPtrWrapper : (";
    for_each(deque1.begin(), deque1.end(), print);
    cout << ")" << endl;
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -