Po prostu uczenie się C++, więc może nie rozumiem tego poprawnie, ale przeczytałem tylko, że funkcja wstawiania zakresu zwraca iterator pod nowym standardem (C++ Primer 5th Ed, cplusplus.com, cppreference.com i różne odpowiedzi sugerujące jego użycie zachować aktualność iteratora).Funkcje wstawiania kontenerów STL powracają do pustej przestrzeni pod C++ 11?
Od cppreference.com:
template< class InputIt >
iterator insert(const_iterator pos, InputIt first, InputIt last);
Jednak każda wersja Cygwin i MinGW GCC że próbowałem powrócił void użyciu -std = C++ 11. Nawet patrząc na nagłówki wydaje się, że tak to jest napisane i że nic nie mogę zmienić, aby to naprawić.
Czego mi brakuje?
Oto funkcja "końca rozdziału ćwiczenia", którą próbowałem napisać; zastępując jeden ciąg z drugiego w obrębie danego łańcucha:
(rozumiem, że nie będzie działać zgodnie z przeznaczeniem sposób jest napisane)
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;
}
}
Która wersja * * z MinGW używasz? Proszę nie mówić * "każdej wersji" *. To nie pomaga. Być specyficznym. – Nawaz
Ah, dziękuję. Najnowsza kompilacja za pomocą 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; i MinGW-TDM 4.7.1-dw2 – Habnab
Spróbuj. GCC '4.8.0'. Jest najnowszy! – Nawaz