Я пытался понять функторы. У меня есть следующая программа, которую я заимствовал и изменил с functors and their uses.Оператор утверждения C++, вызывающий segfault
#include <iostream>
#include <vector>
#include <assert.h>
#include <algorithm>
/*
* A functor is pretty much just a class which defines the operator().
* That lets you create objects which "look like" a function
**/
struct add_x
{
add_x(int y) : x(y)
{
}
int operator()(int y) const {
return x + y;
}
private:
int x;
};
int main()
{
/* create an instance of the functor class*/
add_x add42(42);
/* and "call" it */
int i = add42(8);
/*and it added 42 to its argument*/
assert(i == 50);
/*assume this contains a bunch of values*/
std::vector<int> in;
std::vector<int> out(in.size());
/*
* Pass a functor to std::transform, which calls the functor on every element
* in the input sequence, and stores the result to the output sequence
*/
std::transform(in.begin(), in.end(), out.begin(), add_x(1));
/*for all i*/
assert(out[i] == (in[i] + 1));
return 0;
}
Я получаю ошибку сегментации во втором утверждении assert в main(). (assert(out[i] == (in[i] + 1));
) Кажется, я не понимаю, почему?
'INT I = add42 (8)', а затем вы используете 'i' позже индексировать в пустой 'VECTOR'. Ошибки, подобные этим, должны быть тривиальными, если вы запустите под отладчиком. – Praetorian
Просьба представить [минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). –
'/ * Предположим, что это содержит кучу значений * /' no, I will * not *. Вам нужно предоставить фактический код для нас, чтобы понять, почему он ломается. Очевидно, что вышеприведенный код ломается, он обращается к 50-му элементу пустого массива. Ваш код? Есть некоторые проблемы, которые мы не можем диагностировать. Не просто отправляйте весь свой код, а воспроизводите фактический пример, который остается простым, но вы получаете свою проблему (скажем, на самом деле заполняют векторы? С фиксированными значениями?). Затем проверьте, что ваша проблема возникает в вашем простом случае. – Yakk