关于STL的for_each的使用, 例子1:
class T1
{
public:
virtual void S1()=0;
virtual void S2()=0;
};
class T2 : public T1
{
public:
virtual void S1() {
printf("T2:S1\n");
}
virtual void S2() {
printf("T2:S2\n");
}
};
class T3_1 : public T2
{
public:
virtual void S1() {
printf("T3_1:S1\n");
}
};
class T3_2 : public T2
{
public:
virtual void S1() {
printf("T3_2:S1\n");
}
virtual void S2() {
printf("T3_2:S2\n");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
typedef list<T1 *> TSTTB;
TSTTB list1;
list1.push_back(new T2());
list1.push_back(new T3_1());
list1.push_back(new T3_2());
printf("T2-T3_1-T3_2\n===============================================\n");
printf("调用&T1::S1\n===============================================\n");
for_each(list1.begin(), list1.end(), mem_fun(&T1::S1));
printf("调用&T1::S2\n===============================================\n");
for_each(list1.begin(), list1.end(), mem_fun(&T1::S2));
return 0;
}
下面是例子2:
int x = 0;
class TestBase
{
public:
~TestBase() {
printf("Name:%d release\n", m_x);
}
TestBase() {
m_x = ++x;
}
virtual void ShowString(char *pChar) {
printf("Name:%d, String: %s\n", m_x, pChar);
}
virtual void ShowString(int num) {
printf("Name:%d, Num: %d\n", m_x, num);
}
virtual void ShowString() {
printf("Name:%d\n", m_x);
}
virtual void ShowClass() {
printf("TestBase\n");
}
private:
int m_x;
};
int _tmain(int argc, _TCHAR* argv[])
{
typedef list<TestBase *> TSTTB;
TSTTB t;
t.push_back(new TestBase());
t.push_back(new TestBase());
t.push_back(new TestBase());
t.push_back(new TestBase());
for_each(t.begin(), t.end(),
bind2nd(mem_fun1<void, TestBase, int>(&TestBase::ShowString), 1));
while (t.size()) {
TestBase *p = t.front();
t.pop_front();
delete p;
}
return 0;
}