When to use pointers?

Well, you could just time it yourself, you know. Like here...

 double rndseq[10];

void fun_arr() {
    double** a = new double* [10];
    for (int i = 0; i < 10; i++) a[i] = new double[10];

    for (int j = 0; j < 10; j++)
        for (int k = 0; k < 10; k++) a[j][k] = rndseq[j];

    for (int i = 0; i < 10; i++) delete[] a[i];
    delete[] a;
}

void fun_vec() {
    std::vector<std::vector<double> > a(10, std::vector<double>(10));
    for (int j = 0; j < 10; j++)
        for (int k = 0; k < 10; k++) a[j][k] = rndseq[j];
}

int main() {
    using namespace std;

    for (int i = 0; i < 10; i++) {
        rndseq[i] = rand() % 10;
    }
    clock_t start;
    double dur;

    double avg = 0;
    for (int k = 0; k < 10; k++) {
        start = clock();
        for (int i = 0; i < 100000; i++) fun_arr();
        dur = (clock() - start) / (double)CLOCKS_PER_SEC;
        cout << "array time elapsed: " << dur << endl;
        avg+=dur;
    }
    cout << "average: " << avg/10 << endl;

    avg = 0;
    for (int k = 0; k < 10; k++) {
        start = clock();
        for (int i = 0; i < 100000; i++) fun_vec();
        dur = (clock() - start) / (double)CLOCKS_PER_SEC;
        cout << "vector time elapsed: " << dur << endl;
        avg+=dur;
    }
    cout << "average: " << avg/10 << endl;
    return 0;
 }

Output:

array time elapsed: 0.112312
array time elapsed: 0.076629
array time elapsed: 0.064202
array time elapsed: 0.062892
array time elapsed: 0.062081
array time elapsed: 0.062174
array time elapsed: 0.062047
array time elapsed: 0.06191
array time elapsed: 0.062196
array time elapsed: 0.061323
average: 0.0687766
vector time elapsed: 0.273569
vector time elapsed: 0.277646
vector time elapsed: 0.276116
vector time elapsed: 0.27601
vector time elapsed: 0.275815
vector time elapsed: 0.277889
vector time elapsed: 0.277475
vector time elapsed: 0.275025
vector time elapsed: 0.275489
vector time elapsed: 0.274858
average: 0.275989
/r/cpp_questions Thread Parent