问题出在块内:

check_sort(l.begin(), l.end(), "list");
time_insert(insert_list, data);
check_sort(s.begin(), s.end(), "set");
time_insert(insert_set, data);
check_sort(v.begin(), v.end(), "vector");
time_insert(insert_vector, data);


错误指出变量未在范围内声明,但l,s,v不应在此处为通用变量吗?我究竟做错了什么。

#include <cmath>
#include <iterator>
#include <iostream>
#include <iomanip>
#include <vector>
#include <ctime>
#include <list>
#include <set>
#include <algorithm>
#include <cstdlib>

using namespace std;

typedef void Inserter(vector<double>);

vector<double> gen_data(int num_elts);
void insert_list(vector<double> data);
void insert_set(vector<double> data);
void insert_vector(vector<double> data);

void time_insert( Inserter inserter, vector<double> data);

template <class Iter> bool is_sorted(Iter first, Iter last);
template <class Iter> void check_sort(Iter first, Iter last, string cont_kind);

int main() {
    srand(time(0));// initialize random number generator
    cout << "How many elements for container? ";
    int num_elts = 0;

    while (cin >> num_elts) {
    if (num_elts <= 0)
        cout << "Error, should be > 1";
    else {
        vector<double> data = gen_data(num_elts);

        check_sort(l.begin(), l.end(), "list");
        time_insert(insert_list, data);
        check_sort(s.begin(), s.end(), "set");
        time_insert(insert_set, data);
        check_sort(v.begin(), v.end(), "vector");
        time_insert(insert_vector, data);

    }
    cout << "\nHow many elements for next container? ";

    }
    return 0;

}
void time_insert( Inserter inserter, vector<double> data) {
    clock_t t1 = clock();
    if (t1 == clock_t(-1)) { //if clock() doesn’t work
    cerr << "sorry, no clock\n";
    exit(1);
    }

    inserter(data);
    clock_t t2 = clock();
    if (t2 == clock_t(-1)) {
    cerr << "sorry, clock overflow\n";

    exit(2);
    }

    cout << "Elapsed time: " << fixed << setprecision(2)
     << double(t2-t1)/CLOCKS_PER_SEC << " seconds\n";

}

class Larger_than {
    double v;
public:
    Larger_than(double vv) : v(vv){}
    bool operator()(double x) const {return x>v;}
};

// Sorts and then inserts data into a list
void insert_list(vector<double> data)
{
    list<double> l;
    for(int i=0; i < data.size(); i++){
    list<double>::iterator p = find_if(l.begin(),l.end(), Larger_than(data[i]));
    l.insert(p, data[i]);
    }
}
// Sorts and then inserts data into a list
void insert_set(vector<double> data)
{
    set<double> s;
    for(int i=0; i < data.size(); i++){
    set<double>::iterator p = find_if(s.begin(),s.end(), Larger_than(data[i]
                          ));
    s.insert(p, data[i]);
    }
}
// Sorts and then inserts data into a list
void insert_vector(vector<double> data)
{
    vector<double> v;
    for(int i=0; i < data.size(); i++){
    vector<double>::iterator p = find_if(v.begin(),v.end(), Larger_than(data
                                        [i]));
    v.insert(p, data[i]);
    }
}

// generate num_elts random numbers in the range [0.0, 1.0),
// which are returned in a vector

vector<double> gen_data (int num_elts)
{
    vector<double> result;
    for (int i = 0; i < num_elts; i++) {
    double datum = 1.0*rand()/RAND_MAX;
    result.push_back(datum);
    }
    return result;
}

// is container spanned by [from, last) sorted?
template <class Iter> bool is_sorted(Iter first, Iter last)
{
    Iter next = first;                   // next element
    for (next++; next != last; next++, first++) {
    if (*first > *next)
        return false;
    }
    return true;
}

// prints a msg describing container kind, as well as whether container
// spanned by [from, last) is sorted
template <class Iter> void check_sort(Iter first, Iter last, string cont_kind)
{
    cout << "Check: " << cont_kind << " is ";
    if (!is_sorted(first, last)) cout << "not ";
    cout << "sorted\n";
}

最佳答案

main应该如何完全了解slv?它们是完全不相关的函数(insert_xxx函数)的局部变量,main无法知道它们。如果要使它们全局可访问,只需使它们成为全局变量,即将它们的定义放在main之前:

// ...

list<double> l;
set<double> s;
vector<double> v;

int main(){
  // ....
}

// ...

关于c++ - 未在此范围内声明的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5944432/

10-12 00:33
查看更多