コード例 #1
1
ファイル: algo_demo.cpp プロジェクト: jk983294/MyAlgorithm
void basic_algo(){
    cout<<endl<<"basic_algo :"<<endl;
    int ia[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8 };
    vector<int> iv1(ia,ia+5);	vector<int> iv2(ia,ia+9);
    cout<<iv1<<endl<<iv2<<endl;
    pair<vector<int>::iterator,vector<int>::iterator> p = mismatch(iv1.begin(),iv1.end(),iv2.begin());	//返回在游标的哪个位置不匹配
    if(p.first != iv1.end())	cout<<*(p.first)<<endl;
    if(p.second != iv2.end())	cout<<*(p.second)<<endl;

    cout<<equal(iv1.begin(),iv1.end(),iv2.begin())<<endl;	//比较容器内内容
    cout<<equal(iv1.begin(),iv1.end(),&ia[3])<<endl;
    cout<<equal(iv1.begin(),iv1.end(),&ia[3],less<int>())<<endl;

    fill(iv1.begin(),iv1.end(),9);			//区间填充
    cout<<iv1<<endl;
    fill_n(iv1.begin(), 3, 7);		//区间n填充
    cout<<iv1<<endl;
    vector<int>::iterator iter1,iter2;
    iter1 = iter2 = iv1.begin();
    advance(iter2,3);						//游标向前移动
    iter_swap(iter1,iter2);					//交换两个游标内容
    cout<<iv1<<endl;
    swap(*iv1.begin(),*iv2.begin());	//交换两个游标内容
    cout<<iv1<<endl<<iv2<<endl;
    string stra1[] = {"jk","jK1","jk2"};	string stra2[] = {"jk","jk1","jk3"};
    cout<<lexicographical_compare(stra1,stra1+2,stra2,stra2+2)<<endl;
    cout<<lexicographical_compare(stra1,stra1+2,stra2,stra2+2,greater<string>())<<endl;

    copy(iv2.begin()+1,iv2.end(),iv2.begin());		//全部元素向前移一格
    cout<<iv2<<endl;
    copy_backward(iv2.begin(),iv2.end()-1,iv2.end());	//全部元素向后移一格
    cout<<iv2<<endl;
}
コード例 #2
0
ファイル: _vector.c プロジェクト: jiayuehua/STLport
void  __vector__<_Tp, _Alloc>::_M_range_insert(
					   __iterator__ __position,
					   _ForwardIterator __first,
					   _ForwardIterator __last,
					   forward_iterator_tag)
# endif /* MEMBER_TEMPLATES */

# if !( defined ( __STL_MEMBER_TEMPLATES ) &&  defined (__STL_INLINE_MEMBER_TEMPLATES))
{
  if (__first != __last) {
    size_type __n = 0;
    distance(__first, __last, __n);
    if (size_type(_M_end_of_storage._M_data - _M_finish) >= __n) {
      const size_type __elems_after = _M_finish - __position;
      pointer __old_finish = _M_finish;
      if (__elems_after > __n) {
          uninitialized_copy(_M_finish - __n, _M_finish, _M_finish);
          _M_finish += __n;
          copy_backward(__position, __old_finish - __n, __old_finish);
          copy(__first, __last, __position);
      }
      else {
# if (defined ( __STL_MEMBER_TEMPLATES ) && ! defined (__STL_INLINE_MEMBER_TEMPLATES))
          _ForwardIterator __mid = __first;
          advance(__mid, __elems_after);
# else
          __const_pointer__ __mid = __first + __elems_after;
# endif
          uninitialized_copy(__mid, __last, _M_finish);
          _M_finish += __n - __elems_after;
          uninitialized_copy(__position, __old_finish, _M_finish);
          _M_finish += __elems_after;
          copy(__first, __mid, __position);
      }
    }
    else {
      const size_type __old_size = size();
      const size_type __len = __old_size + max(__old_size, __n);
      pointer __new_start = _M_end_of_storage.allocate(__len);
      pointer __new_finish = __new_start;
      __STL_TRY {
	__new_finish = uninitialized_copy(_M_start, __position, __new_start);
	__new_finish = uninitialized_copy(__first, __last, __new_finish);
	__new_finish
	  = uninitialized_copy(__position, _M_finish, __new_finish);
      }
      __STL_UNWIND((_Destroy(__new_start,__new_finish), 
		    _M_end_of_storage.deallocate(__new_start,__len)));
      _Destroy(_M_start, _M_finish);
      _M_end_of_storage.deallocate(_M_start, _M_end_of_storage._M_data - _M_start);
      _M_start = __new_start;
      _M_finish = __new_finish;
      _M_end_of_storage._M_data = __new_start + __len;
    }
  }
コード例 #3
0
ファイル: AlgorithmTest.cpp プロジェクト: bmwcarit/capu
    TEST(AlgorithmTest, CopyBackwardsPointers)
    {
        uint32_t arr[4] = {2, 3, 4, 99};

        uint32_t* result = copy_backward(arr, arr + 3, arr + 4);
        EXPECT_EQ(arr + 1, result);
        EXPECT_EQ(2u, arr[0]);
        EXPECT_EQ(2u, arr[1]);
        EXPECT_EQ(3u, arr[2]);
        EXPECT_EQ(4u, arr[3]);
    }
コード例 #4
0
ファイル: COPYB0.CPP プロジェクト: andmer/hp_stl
int main ()
{
  int result[5];
  copy_backward (numbers, numbers + 5, result + 5);
  for (int i = 0; i < 5; i++)
    cout << numbers[i] << ' ';
  cout << endl;
  for (i = 0; i < 5; i++)
    cout << result[i] << ' ';
  cout << endl;
  return 0;
}
コード例 #5
0
ファイル: AlgorithmTest.cpp プロジェクト: bmwcarit/capu
    TEST(AlgorithmTest, CopyBackwardComplexType)
    {
        BidirectionalTestContainer<ComplexTestType> src(3);
        src[0] = 2;
        src[1] = 3;
        src[2] = 4;
        vector<ComplexTestType> dst(4, 0);

        vector<ComplexTestType>::Iterator result = copy_backward(src.begin(), src.end(), dst.end() - 1u);
        EXPECT_EQ(dst.begin(), result);
        EXPECT_EQ(ComplexTestType(2u), dst[0]);
        EXPECT_EQ(ComplexTestType(3u), dst[1]);
        EXPECT_EQ(ComplexTestType(4u), dst[2]);
        EXPECT_EQ(ComplexTestType(0u), dst[3]);
    }
コード例 #6
0
ファイル: AlgorithmTest.cpp プロジェクト: bmwcarit/capu
    TEST(AlgorithmTest, CopyBackwardIntegralType)
    {
        BidirectionalTestContainer<uint32_t> src(3);
        src[0] = 2;
        src[1] = 3;
        src[2] = 4;
        vector<uint_t> dst(4, 0);

        vector<uint_t>::Iterator result = copy_backward(src.begin(), src.end(), dst.end()-1u);
        EXPECT_EQ(dst.begin(), result);
        EXPECT_EQ(2u, dst[0]);
        EXPECT_EQ(3u, dst[1]);
        EXPECT_EQ(4u, dst[2]);
        EXPECT_EQ(0u, dst[3]);
    }
コード例 #7
0
ファイル: copy.cpp プロジェクト: yapian/STL-Algorithm
int main()
{
	vector<string> coll1 = { "Hello", "this", "is", "an", "example" };
	list<string> coll2;

	// 使用插入式代替赋值式
	copy(coll1.cbegin(), coll1.cend(),       
		back_inserter(coll2));           


	copy(coll2.cbegin(), coll2.cend(),        
		ostream_iterator<string>(cout, " "));  
	cout << endl;


	copy(coll1.crbegin(), coll1.crend(),      
		coll2.begin());                       


	copy(coll2.cbegin(), coll2.cend(),         
		ostream_iterator<string>(cout, " "));  
	cout << endl;

	// initialize source collection with "..........abcdef.........."
	vector<char> source(10, '.');
	for (int c = 'a'; c <= 'f'; c++) {
		source.push_back(c);
	}
	source.insert(source.end(), 10, '.');
	print_elements(source, "source: ");

	// copy all letters three elements in front of the 'a'
	vector<char> c1(source.cbegin(), source.cend());
	copy(c1.cbegin() + 10, c1.cbegin() + 16,           // source range
		c1.begin() + 7);                            // destination range
	print_elements(c1, "c1:     ");

	// 从后向前挨个复制,与上述copy复制的方向相反
	vector<char> c2(source.cbegin(), source.cend());
	copy_backward(c2.cbegin() + 10, c2.cbegin() + 16,  // source range
		c2.begin() + 19);                  // destination range
	print_elements(c2, "c2:     ");

}