В приведенном ниже тесте я использую boost :: comb для повторения вывода функции getPoints()
.
Ожидаемый результат
Я ожидаю (1, 2, 3) напечатано 6 раз; так как я эффективно архивирую два списка -
([точка, точка, точка], [точка, точка, точка]).
Фактический объем производства
Вывод для меня неожиданный и неправильный. Первые две строки выключены, предполагая повреждение памяти?
(0, 0, 3) // <-- wrong!
(52246144, 0, 3) // <-- wrong! memory corruption?
(1, 2, 3)
(1, 2, 3)
(1, 2, 3)
(1, 2, 3)
Это также можно проверить онлайн здесь, http://cpp.sh/622h4.
Это ошибка?
код ниже -
#include <iostream>
#include <vector>
#include <boost/range/combine.hpp>
struct Point {
int x, y, z;
};
const std::vector<Point> getPoints() {
// There is only one Point in the entire code, which is (1, 2, 3).
const Point point = {1, 2, 3};
// Return a vectore of 3 copies of the point (1, 2, 3).
return {point, point, point};
}
int main() {
// Zip over two copies of 3-tuples of {1, 2, 3}.
for (const auto& zipped : boost::combine(getPoints(), getPoints())) {
auto p1 = zipped.get<0>();
auto p2 = zipped.get<1>();
// Expected output is (1, 2, 3), six times.
std::cout << "(" << p1.x << ", " << p1.y << ", " << p1.z << ")" << std::endl;
std::cout << "(" << p2.x << ", " << p2.y << ", " << p2.z << ")" << std::endl;
}
return 0;
}