내 질문에 관련 정보가 모두 포함되어 있지 않은 경우 사과드립니다. 의견을 말하면 그에 따라 개정 할 것입니다.iterator가 lvalue로 역 참조되지 않는 이유
내가는 MinGW와 GCC와 Win7에에 CLion를 사용
난하지만 난 것 같다 피트 Goodlife에 의해 circular buffer를 사용하려면 내 프로젝트의 크기, 원형 버퍼 실험 및 boost::circular_buffer
건너 온 한 단 한 번의 구현으로 단 한 번의 구현처럼 .hpp
.
참고 : 저는 Boost dependencies and bcp 덕분에 부양 의존성을 줄이는 방법을 알고 있습니다.
그러나 Pete의 구현을 사용한 다음 예는 예상대로 동작하지 않습니다. 즉 std::adjacent_difference(cbuf.begin(),cbuf.end(),df.begin());
의 결과는 입니다. 그 이유를 이해하고 가능하면 행동을 수정하고 싶습니다. 다음을 인쇄
#include "circular.h"
#include <iostream>
#include <algorithm>
typedef circular_buffer<int> cbuf_type;
void print_cbuf_contents(cbuf_type &cbuf){
std::cout << "Printing cbuf size("
<<cbuf.size()<<"/"<<cbuf.capacity()<<") contents...\n";
for (size_t n = 0; n < cbuf.size(); ++n)
std::cout << " " << n << ": " << cbuf[n] << "\n";
if (!cbuf.empty()) {
std::cout << " front()=" << cbuf.front()
<< ", back()=" << cbuf.back() << "\n";
} else {
std::cout << " empty\n";
}
}
int main()
{
cbuf_type cbuf(5);
for (int n = 0; n < 3; ++n) cbuf.push_back(n);
print_cbuf_contents(cbuf);
cbuf_type df(5);
std::adjacent_difference(cbuf.begin(),cbuf.end(),df.begin());
print_cbuf_contents(df);
}
: 다음 df.begin()
반복자는 좌변으로 역 참조되지 않는 이유
Printing cbuf size(3/5) contents...
0: 0
1: 1
2: 2
front()=0, back()=2
Printing cbuf size(0/5) contents...
empty
불행하게도, C에 새 것으로 ++ 내가 알아낼 수 없습니다
은 MWE을 따릅니다.
나는 피트의 circular.h
에 라인 (72)에 circular_buffer_iterator
의 멤버 호출을 범인입니다 supsect (또는 완전히 uderstand하지 않습니다) :
elem_type &operator*() { return (*buf_)[pos_]; }
어떤 도움이 아주 많이 감사합니다.
문제는 Pete의 컨테이너가 STL 규격이라고 주장하고 있으며 인접한 차이점()의 [예제] (http://en.cppreference.com/w/cpp/algorithm/adjacent_difference#Example)처럼 동작 할 것으로 기대합니다. '벡터에. 상태 업데이트를 트리거하기 위해 어떤 조정을해야합니까? – Oleg
[this post] (http://stackoverflow.com/questions/27215748/what-happens-if-i-use-vectorbegin-)에서'back_inserter()'에 대해 좀 더 읽은 후에, 대신에 stdback-insertervector-for), 기본적으로 내 사용 사례를 설명합니다. 그러나, 나는 왜 cppreference가 그런 예를 포함 할 것인지 확신 할 수 없다. – Oleg