Сообщение Re[19]: попинайте пожалуйста резюме от 28.05.2021 7:49
Изменено 28.05.2021 7:51 Максим
Re[19]: попинайте пожалуйста резюме
PM>>
Тё>В чём запинка?
Тут много может быть сюрпризов. Ну например, такой вариант некорректной работы. vec[0] возвращает ссылку на нулевой объект, далее его нужно вставить в вектор. Во время push_back вы видите, что нижележащий массив мал по размеру, вы создаете новый большего размера, а старую память отпускаете (и ее в этот момент кто-то начинает использовать в своих целях). После этого вы начинаете вставлять в новый массив то, что находится по ссылке vec[0]. Но проблема в том, что там сейчас могут быть совсем другие данные. И подобных нюансов, я уверен сотни. Не даром эти контейнеры десятилетиями вылизывают.
PM>>int main()
PM>>{
PM>> my_vector<std::string> vec;
PM>> vec.push_back("hallo welt! the string is longer than 24 characters to run over SSO");
PM>> for (int i = 0; i <1000; ++i)
PM>> {
PM>> vec.push_back(vec[0]);
PM>> }
PM>>}
PM>>
Тё>В чём запинка?
Тут много может быть сюрпризов. Ну например, такой вариант некорректной работы. vec[0] возвращает ссылку на нулевой объект, далее его нужно вставить в вектор. Во время push_back вы видите, что нижележащий массив мал по размеру, вы создаете новый большего размера, а старую память отпускаете (и ее в этот момент кто-то начинает использовать в своих целях). После этого вы начинаете вставлять в новый массив то, что находится по ссылке vec[0]. Но проблема в том, что там сейчас могут быть совсем другие данные. И подобных нюансов, я уверен сотни. Не даром эти контейнеры десятилетиями вылизывают.
Re[19]: попинайте пожалуйста резюме
PM>>
Тё>В чём запинка?
Тут много может быть сюрпризов. Ну например, такой вариант некорректной работы. vec[0] возвращает ссылку (https://en.cppreference.com/w/cpp/container/vector/operator_at) на нулевой объект, далее его нужно вставить в вектор. Во время push_back вы видите, что нижележащий массив мал по размеру, вы создаете новый большего размера, а старую память отпускаете (и ее в этот момент кто-то начинает использовать в своих целях). После этого вы начинаете вставлять в новый массив то, что находится по ссылке vec[0]. Но проблема в том, что там сейчас могут быть совсем другие данные. И подобных нюансов, я уверен сотни. Не даром эти контейнеры десятилетиями вылизывают.
PM>>int main()
PM>>{
PM>> my_vector<std::string> vec;
PM>> vec.push_back("hallo welt! the string is longer than 24 characters to run over SSO");
PM>> for (int i = 0; i <1000; ++i)
PM>> {
PM>> vec.push_back(vec[0]);
PM>> }
PM>>}
PM>>
Тё>В чём запинка?
Тут много может быть сюрпризов. Ну например, такой вариант некорректной работы. vec[0] возвращает ссылку (https://en.cppreference.com/w/cpp/container/vector/operator_at) на нулевой объект, далее его нужно вставить в вектор. Во время push_back вы видите, что нижележащий массив мал по размеру, вы создаете новый большего размера, а старую память отпускаете (и ее в этот момент кто-то начинает использовать в своих целях). После этого вы начинаете вставлять в новый массив то, что находится по ссылке vec[0]. Но проблема в том, что там сейчас могут быть совсем другие данные. И подобных нюансов, я уверен сотни. Не даром эти контейнеры десятилетиями вылизывают.