私の質問にすべての関連情報が含まれていないとお詫び申し上げます。コメントしてください、私はそれに応じて修正します。反復子が左辺値として逆参照されない理由
私はMinGWのとgccでWin7の上CLionを使用
私は私は思わピートGoodlifeによってcircular bufferを使用したい私のプロジェクトの大きさのため、循環バッファを使って実験し、boost::circular_buffer
に出くわしてきましたただ1つの固体実装のように.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に準拠していると主張しているので、 'adjacent_difference() 'のこの[example](http://en.cppreference.com/w/cpp/algorithm/adjacent_difference#Example) 'ベクトル上にある。状態の更新をトリガするためにどのような調整を導入する必要がありますか? – Oleg
私は、[this post]の 'back_inserter()'についてもう少し詳しく読むことを理解し始めていると思います。(http://stackoverflow.com/questions/27215748/what-happens-if-i-use-vectorbegin- stdback-insertervector-forの代わりに)、これは基本的に私の使用事例を説明しています。しかし、私はcppreferenceがそのような例を含む理由は不明です... – Oleg