현재 내 자신의 벡터 클래스로 실험하는 동안 오류가 발생했습니다. 좀 더 구체적으로 말하자면 메모리 할당 목적으로 std :: allocator 클래스를 사용하는 템플릿 기반 클래스입니다. 더 구체적으로, 오류는 내 범위 생성자 함수에서 2 입력 반복자를 사용하고 "uninitialized_copy"함수를 복사 용도로 사용합니다. 여기초기화되지 않은 복사 오류
#include <memory>
#include <iostream>
template <typename T, typename allocator_type = std::allocator<T>>
class vector
{
public:
// fill ctor 2
vector (size_t n, const T& val,
const allocator_type& alloc = allocator_type())
: my_alloc(alloc),
begin_(my_alloc.allocate(n)),
end_(begin_ + n),
size_(n),
capacity_(n)
{
std::uninitialized_fill(begin(), end(), val);
}
// range ctor
template <typename InputIterator>
vector (InputIterator first, InputIterator last,
const allocator_type& alloc = allocator_type())
: my_alloc(alloc),
size_(0),
begin_(0),
end_(0),
capacity_(0)
{
// Poor method for finding input container size, a better solution perhaps?
InputIterator f = first;
while (f++ != last)
++size_;
begin_ = my_alloc.allocate(size());
end_ = begin_ + size();
capacity_ = size();
std::uninitialized_copy(first, last, begin_);
}
T* begin() { return begin_; }
T* end() { return end_; }
size_t size() { return size_; }
size_t capacity() { return capacity_; }
private:
allocator_type my_alloc;
size_t size_, capacity_;
T* begin_, *end_;
};
int main()
{
vector<int> lst(10, 5);
vector<int> lst2(lst.begin(), lst.end());
}
지금 내가 컴파일 코드의 그루터기는, 내가 그것을 구조체 표준에서 어떤 유형의 이름 VALUE_TYPE :: iterator_traits, 생성자 등의 내 다른 유형과 같은 이상한 "에 대해 뭔가를 말한다 오류가 발생 덧붙여 필자는 컴파일러가 "int *"대신 "int"가되도록 "InputTterator"유형을 추론했음을 알았습니다.
나는 내 머리카락을 꺼내 왔습니다. 지난 몇 시간 동안 디버깅을 시도했지만 아무런 해결책도 찾을 수없는 것 같습니다. 어떤 도움이라도 대단히 감사하겠습니다.
감사합니다.
편집 : 죄송합니다. 실수로 내 부분에. 템플릿 매개 변수의 일부로 2 int를 보내는 것은 의도적 인 것이 아닙니다. 위의 코드를 편집했습니다. 이제는 적절한 fill ctor와 범위 ctor가 있습니다. main 함수는 이제이 ctors를 기반으로 2 개의 벡터를 만듭니다. 오류는 여전히 남아 있습니다. 다시, 내 부분에 큰 실수!
'(10,5)'가 * 반복기 * 쌍을 구성하는 방법을 설명하십시오. 범위 생성자 외에도 생성자가 없으며 두 개의 매개 변수와 기본 값 할당자가 필요합니다. 두 개의 int 값은 단독 생성자와 선언문을 일치 시키지만 사용하지는 않습니다. 그래서 ... 그러지 마? – WhozCraig