2015-02-27 1 views
0

Je voudrais passer de foo à bar.Comment utiliser std :: back_inserter pour insérer dans un conteneur (seulement un pointeur sur le conteneur)

struct A 
{ 
    explicit A(int d): m_d(d) {}; 
private: 
    int m_d; 
}; 
A some_function (int i) { return A(2*i); } 

std::vector<int> foo; 
std::vector<A> bar; // This is part of a Library not under my control 

L'interface ne fournit que antiprotons

std::vector<A>* pbar =&bar; // This is the interface to the part of a Library not under my control 

Est-il légal de déréférencer und antiprotons utilisent comme argument pour back_inserter? Pourquoi?

std::transform (foo.begin(), foo.end(), std::back_inserter(*pbar), some_function); 

Un exemple complet est ici: http://coliru.stacked-crooked.com/a/2aec8d000cabf78b

+0

@Pourquoi n'est-ce pas légal? En fait, std :: back_insert_iterator utilise en interne un pointeur sur le conteneur. –

Répondre

1

Oui, il n'y a pas de problème avec cela du tout. Je ne suis pas vraiment sûr de la source de votre confusion, donc je ne suis pas sûr de savoir comment répondre "pourquoi". Si vous avez un pointeur non const vers un objet, vous pouvez le déréférencer et le passer aux fonctions qui ont besoin d'une référence non const (comme std::back_inserter).

+0

Ma confusion survient parce que je n'étais pas sûr si cette référence est plus tard affectée à une valeur et faire une copie. – ToBe