我是使用 boost 配接器的新手,我使用以下代碼將向量一類轉換為轉換版本。
boost::transformed 的回傳型別不符合預期。有人可以說明我在這里缺少什么嗎:
class blabla
{
public:
int x;
};
class blabla2
{
public:
int y;
blabla2(int a)
{
y=a;
}
};
int main()
{
using namespace boost::adaptors;
std::vector<blabla> test;
auto foo = [](const blabla& A) -> std::pair<blabla2, double> {
return std::make_pair(blabla2(A.x), double(A.x));
};
const auto histogram = test | boost::adaptors::transformed(foo);
// std::vector<std::pair<blabla2, double>> should be return type?
std::vector<std::pair<blabla2, double>> histogramtest = histogram; ----> this line gives error unexpectedly. Why is it so?
std::pair<blabla2, double> x = histogram[0];
}
該行std::vector<std::pair<blabla2, double>> histogramtest = histogram;給出錯誤
雖然std::pair<blabla2, double> x = histogram[0];作業正常。為什么呢?
uj5u.com熱心網友回復:
回傳值是boost::transformed_range<decltype(foo), std::vector<blabla>>,不是std::vector<std::pair<blabla2, double>>。如果你想達到預期的型別,你應該做這樣的事情:
std::vector<std::pair<blabla2, double>> histogramtest;
boost::copy( test | transformed(foo), std::back_inserter(histogramtest));
uj5u.com熱心網友回復:
您需要將范圍復制到向量中。
例如
#include "boost/range/adaptor/transformed.hpp"
#include "boost/range/algorithm.hpp"
#include <iostream>
#include <vector>
class blabla
{
public:
int x;
};
class blabla2
{
public:
int y;
blabla2(int a)
{
y = a;
}
};
int main()
{
std::vector<blabla> test = { {1}, {2}, {3} };
auto foo = [](const blabla& A) -> std::pair<blabla2, double> {
return std::make_pair(blabla2(A.x), double(A.x));
};
const auto test_range = test | boost::adaptors::transformed(foo);
std::vector<std::pair<blabla2, double>> test_output_vector;
boost::range::copy(test_range, std::back_inserter(test_output_vector));
for (const auto& [b, v] : test_output_vector) {
std::cout << b.y << ", " << v << "\n";
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/368036.html
上一篇:模態組件不顯示
下一篇:復制省略并移動建構式
