Section 5 - vectors vs. Arrays: The Listing
1B.5.1 The Listing
Here is the entire program whose results we discussed in the last section. Try it out on your system. You may find very different results - maybe even results that contradict my findings. Please report it in the forums because this is a fluid subject matter and I learn from your reports just as much as you do from mine.
// Analysis of arrays vs. vectors using various access techniques // CS 2C, Foothill College, Michael Loceff, creator #include <iostream> #include <string> using namespace std; #include <vector> // for timing our algorithms #include <time.h> clock_t startClock(); double computeElapsedTime(clock_t startTime); void displaySeconds(string message, double timeInSecs); // --------------- main --------------- #define ARRAY_SIZE 200000 int main() { int k; double avg; int arrayOfInts[ARRAY_SIZE]; vector<int> vectorOfInts(ARRAY_SIZE); vector<int> vectorOfInts2; clock_t startTime; double elapsedTime; startTime = startClock(); // START TIME START TIME START TIME ---------- for (k = 0; k < ARRAY_SIZE; k++) arrayOfInts[k] = rand()%100; // compute the average using array for (k = 0, avg = 0.; k < ARRAY_SIZE; k++) avg += arrayOfInts[k]; avg/=ARRAY_SIZE; cout << avg << endl; elapsedTime = computeElapsedTime(startTime); // STOP TIME STOP TIME STOP TIME ----- displaySeconds("Time for simple array: ", elapsedTime); startTime = startClock(); // START TIME START TIME START TIME ---------- for (k = 0; k < ARRAY_SIZE; k++) vectorOfInts[k] = rand()%100; // compute the average using array for (k = 0, avg = 0.; k < ARRAY_SIZE; k++) avg += vectorOfInts[k]; avg/=ARRAY_SIZE; cout << avg << endl; elapsedTime = computeElapsedTime(startTime); // STOP TIME STOP TIME STOP TIME ----- displaySeconds("Vector using []: ", elapsedTime); startTime = startClock(); // START TIME START TIME START TIME ---------- for (k = 0; k < ARRAY_SIZE; k++) vectorOfInts[k] = rand()%100; // compute the average using array for (k = 0, avg = 0.; k < ARRAY_SIZE; k++) avg += vectorOfInts.at(k); avg/=ARRAY_SIZE; cout << avg << endl; elapsedTime = computeElapsedTime(startTime); // STOP TIME STOP TIME STOP TIME ----- displaySeconds("Vector using at(): ", elapsedTime); startTime = startClock(); // START TIME START TIME START TIME ---------- for (k = 0; k < ARRAY_SIZE; k++) vectorOfInts2.push_back(rand()%100); // compute the average using array for (k = 0, avg = 0.; k < ARRAY_SIZE; k++) avg += vectorOfInts2[k]; avg/=ARRAY_SIZE; cout << avg << endl; elapsedTime = computeElapsedTime(startTime); // STOP TIME STOP TIME STOP TIME ----- displaySeconds("Vector using push_back():" , elapsedTime); return 0; } // for timing our algorithms clock_t startClock() { return clock(); } double computeElapsedTime(clock_t startTime) { clock_t stopTime = clock(); return (double)(stopTime - startTime)/(double)CLOCKS_PER_SEC; } void displaySeconds(string message, double timeInSecs) { cout << "Elapsed time for " << message << timeInSecs << " seconds." << endl; }