Sto solo imparando C++, quindi potrei non capirlo correttamente, ma ho letto solo che la funzione di inserimento intervallo restituisce un iteratore sotto il nuovo standard (C++ Primer 5th Ed, cplusplus.com, cppreference.com e varie risposte che suggeriscono di usarlo per mantenere la validità dell'iteratore).Le funzioni di inserimento intervallo dei contenitori STL restituiscono void in C++ 11?
Da cppreference.com:
template< class InputIt >
iterator insert(const_iterator pos, InputIt first, InputIt last);
vuoto Tuttavia, tutte le versioni di Cygwin GCC e MinGW che ho provato è tornato con -std = C++ 11. Anche guardando le intestazioni sembrerebbe che sia così che è scritto, e che non c'è nulla che possa modificare per sistemarlo.
Cosa mi manca?
Ecco la funzione "fine del capitolo dell'esercizio" che stavo tentando di scrivere; sostituzione di una stringa con un'altra all'interno di una stringa data:
(Capisco che non funziona come previsto il modo in cui è scritto)
void myfun(std::string& str, const std::string& oldStr, const std::string& newStr)
{
auto cur = str.begin();
while (cur != str.end())
{
auto temp = cur;
auto oldCur = oldStr.begin();
while (temp != str.end() && *oldCur == *temp)
{
++oldCur;
++temp;
if (oldCur == oldStr.end())
{
cur = str.erase(cur, temp);
// Here we go. The problem spot!!!
cur = str.insert(cur, newStr.begin(), newStr.end());
break;
}
}
++cur;
}
}
Quali * * versione di MinGW si sta utilizzando? Per favore non dire * "ogni versione" *. Questo non aiuta. Sii specifico. – Nawaz
Ah, grazie. L'ultima build che utilizza mingw-get-inst-20120426.exe, 4.6.2; i686-W64-mingw32-gcc-dw2-4.8.0-win32_rubenvb; x86_64-W64-mingw32-gcc-4.6.3-2-release-win64_rubenvb; e MinGW-TDM 4.7.1-dw2 – Habnab
Prova. GCC '4.8.0'. È l'ultimo! – Nawaz