簡體   English   中英

“的std ::矢量 <double> :: iterator&#39;沒有名為&#39;begin&#39;的成員

[英]'std::vector<double>::iterator' has no member named 'begin'

因此,我試圖在大型C ++ STL向量上執行遞歸(用於拆分基數遞歸蝴蝶的非常簡單的代碼),並且使用迭代器來調用遞歸,但由於不斷出錯,它無法正常工作。

#include <iostream>
#include <cmath>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

template <typename T>
class fft_data{
public: 
vector<T> re;
vector<T> im;

};

void inline split_radix_rec(vector<double>::iterator r,vector<double>::iterator i, int sgn,int N) {
if (N == 1) {
    return;
} else if (N == 2) {
    for (int k = 0; k < N/2; k++) {
        int index = 2*k;
        int index1 = index+1;
        double taur =  *(r+index1);
        double taui =  *(i+index1);

        *(r+index1) = *(r+index) - taur; 
        *(i+index1) = *(i+index) - taui; 

        *(r+index) = *(r+index) + taur; 
        *(i+index) = *(i+index) + taui; 
    }
    N=N/2;
} else {
    int m = N/2;
    int p = N/4;

    double PI2 = 6.28318530717958647692528676655900577;
    double theta =  -1.0 * sgn * PI2/N;

    double S =  sin(theta);
    double C =  cos(theta);

    double PI6 =  3.0*6.28318530717958647692528676655900577;
    double theta3 =  -1.0 * sgn * PI6/N;

    double S3 =  sin(theta3);
    double C3 =  cos(theta3);

    double wlr =  1.0;
    double wli =  0.0;

    //T wl2r = (T) 1.0;
    //T wl2i = (T) 0.0;

    double wl3r =  1.0;
    double wl3i =  0.0;

    double tau1r,tau1i,tau2r,tau2i;
    double ur,ui,vr,vi;

    for (int j = 0; j < p; j++) {
        int index1 = j+m;
        int index2 = index1+p;
        int index3 = j+p;

        tau1r = *(r+index1);
        tau1i = *(i+index1);

        tau2r = *(r+index2);
        tau2i = *(i+index2);

        ur = tau1r + tau2r;
        ui = tau1i + tau2i;

        vr = sgn* (tau2r - tau1r);
        vi = sgn* (tau2i - tau1i);

        *(r+index2) = *(r+index3) - vi;
        *(i+index2) = *(i+index3) + vr;

        *(r+index1) = *(r+j) - ur;
        *(i+index1) = *(i+j) - ui;

        *(r+index3) = *(r+index3) + vi;
        *(i+index3) = *(i+index3) - vr;

        *(r+j) = *(r+j) + ur;
        *(i+j) = *(i+j) + ui;

    }

    split_radix_rec(r.begin(),i.begin(),sgn,m);
    split_radix_rec(r.begin()+m,i.begin()+m,sgn,p);
    split_radix_rec(r.begin()+m+p,i.begin()+m+p,sgn,p);
}


}


int main() {
vector<double> u,v;
for (int i = 0; i < 256; i++) {
    u.push_back(i);
    v.push_back(i);
}

int sgn = 1;
int N = 256;
split_radix_rec(u.begin(),v.begin(),sgn,N);
return 0;
}

這是我遇到的錯誤

main.cpp:93:21: error: 'std::vector<double>::iterator' has no member named 'begin'

6第93、94、95行出現相同的錯誤(從split_radix_rec函數內部調用了三個split_radix_rec()函數)。 這是更大的代碼的一部分,因此我希望它適用於STL向量。 我究竟做錯了什么?

由於錯誤狀態,您正在std::vector<double>::iterator上調用begin()

您應該在std::vector<double>上調用它,以便它可以返回std::vector<double>::iterator

ri本身就是您代碼中的迭代器(開始)。

嘗試:

split_radix_rec(r,i,sgn,m);
split_radix_rec(r+m,i+m,sgn,p);
split_radix_rec(r+m+p,i+m+p,sgn,p);

有太多的代碼給你一個簡潔的回答,但錯誤清楚地表明您呼叫begin()上的向量迭代器 ,而不是一個向量 而這發生在split_radix_rec遞歸調用中。 您可能打算這樣做:

split_radix_rec(r,i,sgn,m);
split_radix_rec(r+m,i+m,sgn,p);
split_radix_rec(r+m+p,i+m+p,sgn,p);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM