Je suis en train de comprendre comment utiliser le constructeur suivant pour boost :: circular_buffer:C++ utilisant allocateur et initialiseur avec boost tampon circulaire
circular_buffer(capacity_type buffer_capacity, size_type n, const_reference item, const allocator_type& alloc = allocator_type());
J'ai une classe personnalisée:
template<class T> class Custom
{
public:
Custom() :
time(0.0)
{}
double time;
T data_;
};
Avec mon tampon circulaire défini en utilisant le constructeur en prenant juste une capacité:
boost::circular_buffer<Custom<T>> buffer(10);
Je n'ai pas J'ai beaucoup travaillé avec les allocateurs, et je veux initialiser mon tampon avec des valeurs par défaut/vide/zéro à la construction, et il semble que le constructeur mentionné ci-dessus est la façon de faire avec boost :: circular_buffer, mais je ne sais pas exactement comment avec constructeur boost. Si elle était un vecteur ordinaire, je suppose que je peux faire ce qui suit:
int num_elements = 10;
Custom<T> custom;
std::vector<Custom<T>> buffer(10, custom);
je ne pouvais pas vraiment trouver des exemples sur ce particulier, de sorte que toute aide ou des conseils est appréciée.
Ok, c'est génial. Question: Maintenant, quand je repousse, le remplissage commence à la fin, car tous les éléments sont remplis, et ma taille retournera num_elements. Y at-il un moyen de contourner cela? Fondamentalement, je voulais des valeurs par défaut, donc à chaque fois que j'ai accédé au tampon [index] qui n'était pas encore rempli, mais toujours dans la capacité, il ne serait pas d'erreur. Mais je voulais en quelque sorte le comportement du tampon vide où la taille ne renvoie que les éléments que je repoussais spécifiquement et quand je repoussais explicitement cela commencerait au début (en ignorant le défaut). Vous ne savez pas si c'est même possible, pourrait avoir à surcharger certains opérateurs/méthodes? –
@arias_JC Tout comme un vecteur, c'est l'un ou l'autre. soit vous le remplissez par défaut et remplacez par 'operator []' ou vous définissez sa capacité et vous le remplissez avec 'push_back()'. Vous pouvez envelopper le tampon dans votre propre classe et fournir la fonctionnalité que vous voulez si vous devez vraiment l'avoir. – NathanOliver