⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 indirect.cpp

📁 A C++ class library for scientific computing
💻 CPP
字号:
#include <blitz/array.h>#include <blitz/array/indirect.h>#include <list>#include <vector>BZ_USING_NAMESPACE(blitz)BZ_USING_NAMESPACE(std)void example1(){    // Indirection using a list of TinyVector<int,N> objects    Array<int,2> A(4,4), B(4,4);    A = 0;    B = 10*tensor::i + tensor::j;    typedef TinyVector<int,2> coord;    list<coord> I;    I.push_back(coord(1,1));    I.push_back(coord(2,2));    A[I] = B;    cout << "B = " << B << endl << "A = " << A << endl;    // B = 4 x 4    //     0         1         2         3    //    10        11        12        13    //    20        21        22        23    //    30        31        32        33    // A = 4 x 4    //     0         0         0         0    //     0        11         0         0    //     0         0        22         0    //     0         0         0         0}void example2(){    // Cartesian-product indirection    Array<int,2> A(6,6), B(6,6);    A = 0;    B = 10*tensor::i + tensor::j;    vector<int> I, J;    I.push_back(1);    I.push_back(2);    I.push_back(4);    J.push_back(2);    J.push_back(0);    J.push_back(5);    A[indexSet(I,J)] = B;    cout << "B = " << B << endl << "A = " << A << endl;    // B = 6 x 6    //     0         1         2         3         4         5    //    10        11        12        13        14        15    //    20        21        22        23        24        25    //    30        31        32        33        34        35    //    40        41        42        43        44        45    //    50        51        52        53        54        55    // A = 6 x 6    //     0         0         0         0         0         0    //    10         0        12         0         0        15    //    20         0        22         0         0        25    //     0         0         0         0         0         0    //    40         0        42         0         0        45    //     0         0         0         0         0         0}void example3(){    // Simple 1-D indirection, using a STL container of int    Array<int,1> A(5), B(5);    A = 0;    B = 1, 2, 3, 4, 5;    vector<int> I;    I.push_back(2);    I.push_back(4);    I.push_back(1);    A[I] = B;    cout << "B = " << B << endl << "A = " << A << endl;    // B = [          1         2         3         4         5 ]    // A = [          0         2         3         0         5 ]}void example4(){    // Indirection using a list of RectDomain<N> objects.    const int N = 7;    Array<int,2> A(N,N), B(N,N);    typedef TinyVector<int,2> coord;    A = 0;    B = 1;    double centre_i = (N-1)/2.0;    double centre_j = (N-1)/2.0;    double radius = 0.8 * N/2.0;    // circle will contain a list of strips which represent a circular    // subdomain.    list<RectDomain<2> > circle;    for (int i=0; i < N; ++i)    {        double jdist2 = pow2(radius) - pow2(i-centre_i);        if (jdist2 < 0.0)            continue;        int jdist = int(sqrt(jdist2));        coord startPos(i, int(centre_j - jdist));        circle.push_back(strip(startPos, secondDim, int(centre_j + jdist)));    }    // Set only those points in the circle subdomain to 1    A[circle] = B;    cout << "A = " << A << endl;    // A = 7 x 7    //  0  0  0  0  0  0  0    //  0  0  1  1  1  0  0    //  0  1  1  1  1  1  0    //  0  1  1  1  1  1  0    //  0  1  1  1  1  1  0    //  0  0  1  1  1  0  0    //  0  0  0  0  0  0  0}int main(){    example1();    example2();    example3();    example4();   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -