Я новичок в C++ и изучаю лямбды. Моя задача заключалась в реализации массива префиксов и массивов разностей. Когда я реализовал приведенное ниже, при запуске у меня всегда почему-то получалось A[0] = 21. Мне это кажется странным, поскольку я не вижу, где я изменяю A.
Изменение порядка так, чтобы prefix_arr шел после diff_arr, дает мне кажется правильный результат, однако я подозреваю, что полагаюсь на какой-то UB или, может быть, даже у меня есть какая-то ошибочная логика, которую я не могу здесь уловить? Может быть, я не собираюсь использовать std::array для передачи такой лямбды?
Пожалуйста, дайте мне знать, что не так, чтобы я мог научиться.
Пожалуйста, дайте мне знать, что не так, чтобы я мог учиться.
p>
#include
#include
auto main(void) -> int {
constexpr int N = 6;
const std::array A {{1, 2, 3, 4, 5}};
std::array P{};
std::array D{};
auto prefix_arr = [&](std::array &pref) {
pref[0] = 0;
for (size_t i = 0; i < N; i += 1) {
pref[i + 1] = pref + A;
}
};
auto diff_arr = [&](std::array &diff) {
for (size_t i = 0; i < N - 1; i += 1) {
diff = A[i + 1] - A;
}
};
// PROBLEMATIC ORDER?
//
prefix_arr(P);
diff_arr(D);
//
//
std::cout
Подробнее здесь: https://stackoverflow.com/questions/791 ... ncorrect-o
Неправильная обработка памяти (индексов), генерирующая неправильные значения из-за неправильного порядка потока управлен ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение