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

📄 iter_test.cpp

📁 stl的源码
💻 CPP
字号:
#include <vector>#include <list>#include <algorithm>#include <numeric>#include "iota.h"#include "cppunit/cppunit_proxy.h"#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)using namespace std;#endif//// TestCase class//class IterTest : public CPPUNIT_NS::TestCase{  CPPUNIT_TEST_SUITE(IterTest);  CPPUNIT_TEST(iter1);  CPPUNIT_TEST(iter3);  CPPUNIT_TEST(iter4);  CPPUNIT_TEST(iterswp0);  CPPUNIT_TEST(iterswp1);  CPPUNIT_TEST(iterswp2);  CPPUNIT_TEST(iterswp3);  CPPUNIT_TEST_SUITE_END();protected:  void iter1();  void iter3();  void iter4();  void iterswp0();  void iterswp1();  void iterswp2();  void iterswp3();};CPPUNIT_TEST_SUITE_REGISTRATION(IterTest);//// tests implementation//void IterTest::iter1(){  vector<const char*> v; // Vector of character strings.  v.push_back("zippy"); // First element.  v.push_back("motorboy"); // Second element.  typedef vector<const char*> vec;  unsigned counter = 0;  for (vec::iterator i = v.begin(); i != v.end(); ++i, ++counter) {    switch (counter) {      case 0:        CPPUNIT_ASSERT(!strcmp(*i, "zippy"));        break;      case 1:        CPPUNIT_ASSERT(!strcmp(*i, "motorboy"));        break;      default:        CPPUNIT_FAIL;    }  }}void IterTest::iter3(){  typedef vector<const char*> Vec;  Vec v; // Vector of character strings.  v.push_back("zippy"); // First element.  v.push_back("motorboy"); // Second element.  Vec::reverse_iterator it;  unsigned counter = 0;  for (it = v.rbegin(); it != v.rend(); ++it, ++counter) {    switch (counter) {      case 1:        CPPUNIT_ASSERT(!strcmp(*it, "zippy"));        break;      case 0:        CPPUNIT_ASSERT(!strcmp(*it, "motorboy"));        break;      default:        CPPUNIT_FAIL;    }  }}void IterTest::iter4(){  vector<int> v; // Empty vector of integers.  v.push_back(1);  v.push_back(2);  v.push_back(3);  // Position immediately after last item.  vector<int>::iterator i = v.end();  // Move back one and then access.  CPPUNIT_ASSERT((*--i)==3);  i -= 2; // Jump back two items.  CPPUNIT_ASSERT((*i)==1);}void IterTest::iterswp0(){  int numbers[6] = { 0, 1, 2, 3, 4, 5 };  iter_swap(numbers, numbers + 3);  CPPUNIT_ASSERT(numbers[0]==3);  CPPUNIT_ASSERT(numbers[1]==1);  CPPUNIT_ASSERT(numbers[2]==2);  CPPUNIT_ASSERT(numbers[3]==0);  CPPUNIT_ASSERT(numbers[4]==4);  CPPUNIT_ASSERT(numbers[5]==5);}void IterTest::iterswp1(){  vector<int> v1(6);  __iota(v1.begin(), v1.end(), 0);  iter_swap( v1.begin(), v1.begin() + 3 );  CPPUNIT_ASSERT(v1[0]==3);  CPPUNIT_ASSERT(v1[1]==1);  CPPUNIT_ASSERT(v1[2]==2);  CPPUNIT_ASSERT(v1[3]==0);  CPPUNIT_ASSERT(v1[4]==4);  CPPUNIT_ASSERT(v1[5]==5);}void IterTest::iterswp2(){  vector<bool> boolVector;  boolVector.push_back( true );  boolVector.push_back( false );  vector<bool>::iterator i1 = boolVector.begin();  vector<bool>::iterator i2 = boolVector.begin();  ++i2;  bool v0 = *i1;  bool v1 = *i2;  iter_swap( i1, i2 );  CPPUNIT_ASSERT(( *i1 == v1 && *i2 == v0 ));}void IterTest::iterswp3(){  vector<int> vvref(10, 10);  vector<int> lvref(10, 20);  vector<vector<int> > vvints(4, vvref);  list<vector<int> > lvints(4, lvref);  iter_swap(vvints.begin(), lvints.begin());  CPPUNIT_CHECK( vvints.front() == lvref );  CPPUNIT_CHECK( lvints.front() == vvref );  //const vector<vector<int> > &cvvints = vvints;  //iter_swap(cvvints.begin(), lvints.begin());  //iter_swap(lvints.begin(), cvvints.begin());#if defined (STLPORT) && defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)  int *pvvint = &vvints.front().front();  int *plvint = &lvints.front().front();  iter_swap(vvints.begin(), lvints.begin());  //Check that elements have been swaped:  CPPUNIT_CHECK( pvvint == &lvints.front().front() );  CPPUNIT_CHECK( plvint == &vvints.front().front() );#endif}

⌨️ 快捷键说明

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