Мне нужен класс в котором одно из полей(контейнер) будет подгружаться по мере необходимости. Например когда происходит вызов begin() данные подгрузятся.
Так же у меня есть шаблонная функция поиска, в которой я использую std::find_if, но с ней не хочет дружить отложенная загрузка.
#include <algorithm>
#include <vector>
#include <iostream>
#include <string>
class my_storage
{
public:
using container = std::vector<std::string>;
using iterator = container::iterator;
iterator begin()
{
m_container.push_back("Mike");
m_container.push_back("John");
m_container.push_back("David");
return m_container.begin();
}
iterator end()
{
return m_container.end();
}
private:
container m_container {};
};
template<class T>
typename T::iterator find_David(T& storage)
{
auto find_lambda {[](const std::string& element)
{
return element == "David";
}};
return std::find_if(storage.begin(), storage.end(),
find_lambda); // с этим итератором будет segmentation fault
auto begin {storage.begin()};
return std::find_if(begin, storage.end(), find_lambda); // а так работает
}
int main(int argc, char *argv[])
{
my_storage storage {};
auto david_it {find_David(storage)};
if (david_it != storage.end()) {
std::cout << "David exists" << std::endl;
std::cout << *david_it << std::endl;
}
return 0;
}
Это описание ситуации, а не вопрос :)
А вообще, порядок построения аргументов функции не определен, так что у вас, вероятно, в
return std::find_if(storage.begin(), storage.end(),
сначала вычисляется storage.end()
(для пустого контейнера), а уже потом storage.begin()
(который, добавляя элементы в контейнер, инвалидизирует итератор, возвращенный storage.end()
).
В то время как во втором варианте, понятно, порядок обратный, там storage.begin()
точно вызывается первым..
Порядок выполнения аргументов функции не определен, и в
std::find_if(storage.begin(), storage.end(),
сначала может выполниться end()
, а потом begin()
.
И всё бы хорошо, но у Вас begin()
изменяет контейнер и инвалидирует end()
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
С Linux'ом практически никогда не работал, поэтому в этой теме абсолютный ноль, очень надеюсь на вашу помощь
Не получается задать позиционирование тексту для загрузки аватараЕсть еще одна проблема, имеется выпадающее меню в вверху, она перестала...