Мой тестовый код, как показано ниже; Суть логики заключается в том, что я неоднократно вызываю лямбда -чек , чтобы вернуть следующее самое низкое значение из случайно инициированного вектора целых чисел; Подпись проверки ожидает значения ссылки типа Const на итератор на вектор ints . Inside Check , ITER_NXT_LOW установлен на точку, изначально на аргумент CONST . Ожидается, что когда проверка заканчивает выполнение каждый раз, ITER_NXT_LOW будет содержать новое минимум, либо то же значение, что и значение, полученное путем дреферизации аргумента CONST . Однако, несмотря на использование концентрации const в подписи, по -видимому, проверьте всегда возвращает iter , который будет установлен на vi.end () , в результате следующего:
if ( *iter_nxt_low == *crvit_curr_low)
worne in ine ine in shapeed is ine speaked is ine in ine ine in ine in shapeed a ine in ine in shipeed_curr_low) . Аргумент изменяется из -за проверки при каждом вызове. Таким образом, мой код, кажется, нарушает семантику справки Const , как указано в предыдущем посте.#include
#include
#include
using std::vector;
using std::random_device;
using std::mt19937;
using std::uniform_int_distribution;
using std::cout;
using std::endl;
int func()
{
using IVI = vector::iterator;
vectorvI;
auto initVec = [&]()->void
{
constexpr unsigned MAXSZ = 10;
constexpr int MINRNG = -25;
constexpr int MAXRNG = 25;
random_device rd;
mt19937 gen(rd());
uniform_int_distributiondistr(MINRNG,MAXRNG);
for(size_t i = 0; i < MAXSZ; ++i)
{
vI.push_back(distr(gen));
}
return;
};
auto printVec = [&]()->void
{
for(auto i : vI)
{
cout
Подробнее здесь: https://stackoverflow.com/questions/797 ... r-iterator