Sto provando a ripetere su un numero di std::list
s, ordinando ciascuno di essi. Questo è l'approccio ingenuo:Basato su intervallo per con inizializzatore di controvento su valori non constati?
#include<list>
using namespace std;
int main(void){
list<int> a,b,c;
for(auto& l:{a,b,c}) l.sort();
}
produrre
aa.cpp:5:25: error: no matching member function for call to 'sort'
for(auto& l:{a,b,c}) l.sort();
~~^~~~
/usr/bin/../lib64/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/bits/stl_list.h:1586:7: note:
candidate function not viable: 'this' argument has type 'const
std::list<int, std::allocator<int> >', but method is not marked const
sort();
^
/usr/bin/../lib64/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/bits/stl_list.h:1596:9: note:
candidate function template not viable: requires 1 argument, but 0 were
provided
sort(_StrictWeakOrdering);
^
1 error generated.
Sto correttamente indovinando che brace-inizializzatore è la creazione di copie di tali elenchi? E c'è un modo per non copiarli e renderli modificabili all'interno del ciclo? (oltre a fare una lista di puntatori a loro, che è la mia soluzione attuale).
un po 'brutto, ma forse 'per (auto l: {& a, & b, e c}) l-> sort();' –
@Quentin, e l'initializer_list è una lista di copie dell'originale ' a', b', '' C'. Quindi, anche se potessimo ottenere riferimenti non "convenzionali", non sarebbe molto utile. Abbiamo bisogno di un initializer_list (o contenitore simile) che memorizza i riferimenti. Penso che, a meno che tu non costruisca il tuo contenitore (o ne usi uno da Boost) –