checked_array_iterator Class
checked_array_iterator 클래스를 사용 하면 배열 또는 포인터는 반복기로 변환 합니다.
[!참고]
이 클래스에는 표준 C++ 라이브러리에 대 한 Microsoft 확장입니다.이 알고리즘을 사용 하 여 구현 하는 코드를 휴대용 되지 않습니다.이 클래스는 사용 하지 않아도 되는 코드를 작성 하는 방법을 보여 주는 예제를 보려면 아래의 두 번째 예제를 참조 하십시오.
template <class _Iterator>
class checked_array_iterator
: public iterator<
typename iterator_traits<_Iterator>::iterator_category,
typename iterator_traits<_Iterator>::value_type,
typename iterator_traits<_Iterator>::difference_type,
typename iterator_traits<_Iterator>::pointer,
typename iterator_traits<_Iterator>::reference>
설명
이 클래스에 정의 되어 있는 stdext 네임 스페이스입니다.
반복기 기능에 대 한 자세한 내용은 확인 된 반복기.
예제
다음 샘플에서는 정의 하 고 체크 배열 하는 반복기를 사용 하는 방법을 보여 줍니다.
대상이 너무 작아서 모든 요소를 복사 하 고 저장할 수 없는 경우, 줄을 변경 하는 경우 같은 경우는 다음과 같습니다.
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
를 다음으로 변경:
copy(a, a + 5, checked_array_iterator<int*>(b, 4));
런타임 오류가 발생 합니다.
// checked_array_iterator_overview.cpp
// compile with: /EHsc
#include <algorithm>
#include <iostream>
using namespace std;
using namespace stdext;
int main() {
int a[]={0, 1, 2, 3, 4};
int b[5];
copy(a, a + 5, checked_array_iterator<int*>(b, 5));
cout << "(";
for (int i = 0 ; i < 5 ; i++)
cout << " " << b[i];
cout << " )" << endl;
// constructor example
checked_array_iterator<int*> checked_out_iter(b, 5);
copy(a, a + 5, checked_out_iter);
cout << "(";
for (int i = 0 ; i < 5 ; i++)
cout << " " << b[i];
cout << " )" << endl;
}
필요성을 방지 하기 위해는 checked_array_iterator 클래스 표준 C++ 라이브러리 알고리즘을 사용 하는 경우, 사용 하는 것은 vector 는 동적으로 할당 된 배열 대신.다음 예제에서는 이 작업을 수행하는 방법을 보여 줍니다.
// checked_array_iterator_2.cpp
// compile with: /EHsc
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> v(10);
int *arr = new int[10];
for (int i = 0; i < 10; ++i)
{
v[i] = i;
arr[i] = i;
}
// std::copy(v.begin(), v.end(), arr); will result in
// warning C4996. To avoid this warning while using int *,
// use the Microsoft extension checked_array_iterator.
std::copy(v.begin(), v.end(),
stdext::checked_array_iterator<int *>(arr, 10));
// Instead of using stdext::checked_array_iterator and int *,
// consider using std::vector to encapsulate the array. This will
// result in no warnings, and the code will be portable.
std::vector<int> arr2(10); // Similar to int *arr = new int[10];
std::copy(v.begin(), v.end(), arr2.begin());
for (int j = 0; j < arr2.size(); ++j)
{
cout << " " << arr2[j];
}
cout << endl;
return 0;
}
생성자
기본 구문 checked_array_iterator 또는 checked_array_iterator 내부 반복기에서. |
형식 정의
2 간의 차이 설명 하는 형식 checked_array_iterators 동일한 컨테이너 내에서 요소를 참조 합니다. |
|
으로 주소가 지정 된 요소에 대 한 포인터를 제공 하는 형식에 checked_array_iterator. |
|
으로 주소가 지정 된 요소에 대 한 참조를 제공 하는 형식에 checked_array_iterator. |
멤버 함수
내부 반복기에서 복구 되는 checked_array_iterator. |
연산자
두 테스트 checked_array_iterators 같은지. |
|
두 테스트 checked_array_iterator지 s. |
|
테스트는 checked_array_iterator 연산자의 왼쪽에는 보다는 checked_array_iterator 오른쪽에. |
|
테스트는 checked_array_iterator 연산자의 왼쪽에 보다는 checked_array_iterator 오른쪽에. |
|
테스트는 checked_array_iterator 보다 작거나 같음 연산자의 왼쪽에 되는 checked_array_iterator 오른쪽에. |
|
테스트는 checked_array_iterator 보다 크거나 같음 연산자의 왼쪽에는 있는 checked_array_iterator 오른쪽에. |
|
요소는 반환 된 checked_array_iterator 주소입니다. |
|
포인터를 반환 하 여 주소가 지정 된 요소에는 checked_array_iterator. |
|
증가 checked_array_iterator 다음 요소에 있습니다. |
|
감소는 checked_array_iterator 이전 요소입니다. |
|
지정 된 오프셋에 추가 된 checked_array_iterator. |
|
반복기에 오프셋을 추가 하 고 새 반환 checked_array_iterator 새 오프셋된 위치에 삽입 된 요소를 주소 지정 합니다. |
|
감소에서 지정 된 오프셋 된 checked_array_iterator. |
|
반복기의 오프셋은 감소 및 새로운 반환 checked_array_iterator 새 오프셋된 위치에 삽입 된 요소 주소 지정. |
|
요소의 오프셋 참조로 주소가 지정 된 요소에서 반환 된 checked_array_iterator 지정 된 수의 위치. |
요구 사항
헤더: <iterator>
네임 스페이스: stdext