/* * This is a simple driver for the bound array class that does not copy. */ #include #include #include using std::string; // This is a dirty trick that allows me to compile with different bounded // array headers. Normally uses boundarr1.h, but add compile flag // -DBAHDR=\"somethingelse.h\" to use another. Note that this procedure // depends on the compiler used, but they will probably be pretty consistent // for this. How you add the flag depends on how you are running the // compiler. If an IDE, you'll have to much through its menus. #ifndef BAHDR #define BAHDR "boundarr1.h" #endif #include BAHDR /* * This function takes a BoundArr by value by reference and increments each * item by the given amount, and prints it before and after. */ void arrinc(string label, BoundArr &arr, int incr) { std::cout << " " << label << " before: " << arr << std::endl; for(int i = arr.low(); i <= arr.high(); ++i) arr.at(i) += incr; std::cout << " " << label << " + " << incr << ": " << arr << std::endl; } int main() { std::cout << "Using the version in " << BAHDR << std::endl << std::endl; // Make two arrays and fill them. The numbers have no // particular meaning. BoundArr bai1(5,10); for(int i = bai1.low(); i <= bai1.high(); ++i) bai1.at(i) = 5 + i/6 + 2*i - i*i/5; BoundArr bai2(-4,8); for(int i = bai2.low(); i <= bai2.high(); ++i) bai2.at(i) = 4 + 17*bai1.at(bai1.low() + (i - bai2.low()) % bai1.size())/7; std::cout << "Two arrays with a bunch of useless numbers:" << std::endl; std::cout << " bai1: " << bai1 << std::endl; std::cout << " bai2: " << bai2 << std::endl << std::endl; // Call the exciting function a couple of times. std::cout << "Using a function to increment copies of each array:" << std::endl; arrinc("bai1", bai1, 8); arrinc("bai2", bai2, -5); std::cout << std::endl; // The arrays were passed to the incrementer by reference, so are // they will have been incremented. std::cout << "Since references were used, we see changes in main: " << std::endl; std::cout << " bai1: " << bai1 << std::endl; std::cout << " bai2: " << bai2 << std::endl << std::endl; // Make changes to each. for(int i = bai1.low()+1; i <= bai1.high()-1; ++i) bai1.at(i) = 0; for(int i = bai2.low()+2; i <= bai2.high()-3; ++i) bai2.at(i) = 99; // And independent copies. std::cout << "So we change some in the middle just 'cause we can." << std::endl; std::cout << " bai1: " << bai1 << std::endl; std::cout << " bai2: " << bai2 << std::endl; }