首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++向量元明智划分

c++向量元明智划分
EN

Stack Overflow用户
提问于 2022-04-05 02:54:42
回答 1查看 215关注 0票数 -2

我试图在C++中进行一些简单的计算,并且我使用嵌套的for循环完成了它--这是可以的。

代码语言:javascript
复制
    std::vector<int16_t> roi_1(ROI_WIDTH * ROI_HEIGHT);
    std::vector<int16_t> roi_2(ROI_WIDTH * ROI_HEIGHT);
    std::vector<int16_t> roi_3(ROI_WIDTH * ROI_HEIGHT);
    std::vector<int16_t> roi_4(ROI_WIDTH * ROI_HEIGHT);
    std::vector<int16_t> roi_5(ROI_WIDTH * ROI_HEIGHT);
    std::vector<int16_t> roi_6(ROI_WIDTH * ROI_HEIGHT);
    std::vector<int16_t> roi_7(ROI_WIDTH * ROI_HEIGHT);
     
    std::vector<int16_t> numerator(ROI_WIDTH * ROI_HEIGHT);
    std::vector<int16_t> denominator(ROI_WIDTH * ROI_HEIGHT);
    std::vector<float_t> phi(ROI_WIDTH * ROI_HEIGHT);
    
    memcpy(&roi_1[row*ROI_WIDTH], &ptr[(row+ROI_OFFSET_Y)*stride_pixels + ROI_OFFSET_X], ROI_WIDTH * sizeof(int16_t));
    memcpy(&roi_2[row*ROI_WIDTH], &ptr[(row+ROI_OFFSET_Y)*stride_pixels + ROI_OFFSET_X], ROI_WIDTH * sizeof(int16_t));
    memcpy(&roi_3[row*ROI_WIDTH], &ptr[(row+ROI_OFFSET_Y)*stride_pixels + ROI_OFFSET_X], ROI_WIDTH * sizeof(int16_t));
    memcpy(&roi_4[row*ROI_WIDTH], &ptr[(row+ROI_OFFSET_Y)*stride_pixels + ROI_OFFSET_X], ROI_WIDTH * sizeof(int16_t));
    memcpy(&roi_5[row*ROI_WIDTH], &ptr[(row+ROI_OFFSET_Y)*stride_pixels + ROI_OFFSET_X], ROI_WIDTH * sizeof(int16_t));
    memcpy(&roi_6[row*ROI_WIDTH], &ptr[(row+ROI_OFFSET_Y)*stride_pixels + ROI_OFFSET_X], ROI_WIDTH * sizeof(int16_t));
    memcpy(&roi_7[row*ROI_WIDTH], &ptr[(row+ROI_OFFSET_Y)*stride_pixels + ROI_OFFSET_X], ROI_WIDTH * sizeof(int16_t));
    
    //Calculate the numerator and denominator and phase angle...
    for (unsigned int m = 0; m < ROI_HEIGHT ; m++)
    {
        for(unsigned int n = 0; n < ROI_WIDTH ; n++)
        {
           numerator[m * ROI_WIDTH + n] = C2 * roi_2[m * ROI_WIDTH + n] - C4 * roi_4[m * ROI_WIDTH + n] + roi_6[m * ROI_WIDTH + n];
           denominator[m * ROI_WIDTH + n] = C3 * roi_3[m * ROI_WIDTH + n] - C5 * roi_5[m * ROI_WIDTH + n] + roi_7[m * ROI_WIDTH + n] - roi_1[m * ROI_WIDTH + n];
           phi[m * ROI_WIDTH + n] = atan2(numerator[m * ROI_WIDTH + n], denominator[m * ROI_WIDTH + n]);
        }
    }

但是,我想用向量做计算,但是下面的代码没有提供相同的结果?有人能帮忙吗?谢谢!

代码语言:javascript
复制
    transform(numerator.begin(), numerator.end(), numerator.begin(), [&](const auto &i){return C2*roi_2[i] - C4*roi_4[i] + roi_6[i];});
    transform(denominator.begin(), denominator.end(), denominator.begin(), [&](const auto &i){return C3*roi_3[i] - C5*roi_5[i] + roi_7[i] - roi_1[i];});
    transform(phi.begin(), phi.end(), phi.begin(), [&](const auto &i){return atan2(numerator[i], denominator[i]);});
EN

回答 1

Stack Overflow用户

发布于 2022-04-05 03:14:01

unary_op of std::transform获取输入值,而不是索引。我认为它在任何情况下都会得到i = 0。你可以用索引预先填充向量。

代码语言:javascript
复制
std::iota(numerator.begin(), numerator.end(), 0);
std::iota(denominator.begin(), denominator.end(), 0);
std::iota(numerator.begin(), numerator.end(), 0);

std::transform(phi.begin(), phi.end(), numerator.begin(), [&](const auto &i){return C2*roi_2[i] - C4*roi_4[i] + roi_6[i];});
std::transform(denominator.begin(), denominator.end(), denominator.begin(), [&](const auto &i){return C3*roi_3[i] - C5*roi_5[i] + roi_7[i] - roi_1[i];});
std::transform(phi.begin(), phi.end(), phi.begin(), [&](const auto &i){return atan2(numerator[i], denominator[i]);});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71745842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档