C++STL 배열 Array (C++11)

4395 단어 C++STL
1. 그룹의 간단한 사용 및 사용 시간 테스트:
#include
#include
#include//qsort bsearch NULL
#include
using namespace std;


const int SIZE = 100000;//     
int main()
{
   //  long    ,     SIZE
	arrayarr;
    
	clock_t start = clock();//ms
	for (int i = 0; i < SIZE; i++)
	{
		arr[i] = rand()%100000;
	}
	cout << "  100000      : " << (clock() - start) << endl;
	cout << "array.size()" << arr.size() << endl;
	cout << "array.front()" << arr.front() << endl;
	cout << "array.back()" << arr.back() << endl;
	cout << "array.data()" << arr.data() << endl;//        
	
	//qsort();
	//bsearch();
	return 0;
}
    :
  100000      : 16
array.size()100000
array.front()41
array.back()1629
array.data()0069E2BC
       . . .

        ,        run      

2. 수조의 하부 구조 분석
template
	class array
	{	// fixed size array of values
public:
	enum {_EEN_SIZE = _Size};	// helper for expression evaluator
	typedef array<_ty _size=""> _Myt;
	typedef _Ty value_type;
	typedef size_t size_type;
	typedef ptrdiff_t difference_type;
	typedef _Ty *pointer;
	typedef const _Ty *const_pointer;
	typedef _Ty& reference;
	typedef const _Ty& const_reference;
	//          
	typedef _Array_iterator<_ty _size=""> iterator;
	typedef _Array_const_iterator<_ty _size=""> const_iterator;
	//               
	typedef _STD reverse_iterator reverse_iterator;
	typedef _STD reverse_iterator const_reverse_iterator;

	void assign(const _Ty& _Value){}
	void fill(const _Ty& _Value)	{}
	void swap(_Myt& _Other)_NOEXCEPT_OP(_NOEXCEPT_OP(_Swap_adl(_Elems[0], _Elems[0]))){	}
	iterator begin() _NOEXCEPT{}
	const_iterator begin() const _NOEXCEPT{}
	iterator end() _NOEXCEPT	{}
	size_type size() const _NOEXCEPT{}
	bool empty() const _NOEXCEPT{}
	const_reference at(size_type _Pos) const{}
	reference operator[](size_type _Pos){}
	const_reference operator[](size_type _Pos) const{}
	reference front(){	}
	const_reference front() const{}
	reference back(){}
	const_reference back() const{}
	_Ty *data() _NOEXCEPT{}
	const _Ty *data() const _NOEXCEPT{}

	//         
	_Ty _Elems[_Size == 0 ? 1 : _Size];
	};

여기에는 제 VS 2013의 Array 부분인 SourceCode가 나열되어 있는데 주로 세 가지 부분입니다.
1.       array       ;
2.     ;
3.     :	_Ty _Elems[_Size == 0 ? 1 : _Size];
    ,         0 ,     1   

서로 다른 컴파일러의 실현에 약간의 차이가 있을 수 있지만 기본적인 사고방식과 방법의 사용은 일치한다. 그렇지 않으면 표준 템플릿 라이브러리라고 부른다. 표준이란 모든 플랫폼이 따라야 하기 때문에 우리가 STL을 이해하는 데 영향을 주지 않는다는 뜻이다.
위 프레젠테이션 코드에 사용된 몇 가지 방법을 살펴보겠습니다.
//typedef _Ty& reference;
reference front()//     
{	
	return (_Elems[0]);
}
reference back()//      
{	
	return (_Elems[_Size - 1]);
}
_Ty *data() _NOEXCEPT//        
{
	return (_Elems);
}
//typedef size_t size_type;
size_type size() const _NOEXCEPT//     size
{
	return (_Size);
}
    ,array        ,       

그러나 우리는 특징이 아닌 특징을 발견할 수 있다.
array      ,          ....
array    ,        ,       C             

3. 마지막으로 공식 문서를 보는 예:
#include 
#include 
#include 
#include 
#include 
 
int main()
{
    // construction uses aggregate initialization
    std::array a1{ {1, 2, 3} }; // double-braces required in C++11 prior to the CWG 1270 revision
                                        // (not needed in C++11 after the revision and in C++14 and beyond)
    std::array a2 = {1, 2, 3};  // never required after =
    std::array<:string> a3 = { std::string("a"), "b" };
 
    // container operations are supported
    std::sort(a1.begin(), a1.end());
    std::reverse_copy(a2.begin(), a2.end(), 
                      std::ostream_iterator(std::cout, " "));
 
    std::cout << '
'; // ranged for loop is supported for(const auto& s: a3) } : 3 2 1 a b

참조 주소:https://en.cppreference.com/w/cpp/container/array

좋은 웹페이지 즐겨찾기