是否可以从另外两个数组创建一个数组,一个是源数组,第二个包含要获取的元素的索引,在 C++ 中,仅使用一个命令,没有循环,例如,使用 STL 或促进?例如,给定
double X[10] = [10., 9., 8., 7., 6., 5., 4., 3., 2., 1.];
和
int n[4] = [0, 1, 3, 9];
我想拥有
double X[4] = [10., 9., 7., 1.]
作为结果。 在 MATLAB 中,我会简单地编写类似 X(n) 的内容。
最佳答案
使用 c++11-features 你可以这样做:
std::vector<double> vec;
std::transform(std::begin(n), std::end(n), std::back_inserter(vec), [&](int idx)
{
return x[idx];
});
如果没有 c++11,它可能看起来像这样:
template <typename T, std::size_t N>
struct Get_Idx
{
Get_Idx(T (&t)[N]) : m_t(t) { }
T (&m_t)[N];
T operator()(std::size_t i) const
{
return m_t[i];
}
};
template <typename T, std::size_t N>
Get_Idx<T, N> get_idx(T (&t) [N])
{
return Get_Idx<T, N>(t);
}
std::vector<double> vec2;
std::transform(n, n + 4, std::back_inserter(vec2), get_idx(x));
此外,您为什么使用 c 数组而不是 STL 容器?
关于c++ - 构造一个数组的有效方法,该数组从 C++ 中的另一个数组中获取具有给定索引的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211835/