UList使用



  • 发现UList似乎可以建立动态的数组。例如

    labelUList Marks(0,50);
    

    就初始化了类labelUList,相当于一个有50个数的一位整数数组,且里面每一个数都为0。但是当我想

    Info<<Marks[3]<<endl;
    Marks[5]=55;
    

    就会报错。我看了一下[]已经被重载了,按理说可以读取这个数组的第2个数,不知道为什么会报错。。而且还不能赋值。。不知道咋解决。。报错信息如下

    #0  Foam::error::printStack(Foam::Ostream&) at ??:?
    #1  Foam::sigSegv::sigHandler(int) at ??:?
    #2  ? in /lib/x86_64-linux-gnu/libc.so.6
    #3  ? in ~/OpenFOAM/saumuel-v1806/platforms/linux64GccDPInt64Opt/bin/IBIcoFoamFD
    #4  __libc_start_main in /lib/x86_64-linux-gnu/libc.so.6
    #5  ? in ~/OpenFOAM/saumuel-v1806/platforms/linux64GccDPInt64Opt/bin/IBIcoFoamFD
    Segmentation fault (core dumped)
    


  • labelUList Marks(0,50);
    Info<<&Marks[3]<<endl;
    

    UList里面的成员是指针,需要用&

    class UList
    {
        // Private Data
    
            //- Number of elements in UList
            label size_;
    
            //- Vector of values of type T
            T* __restrict__ v_;
    

    你用scalarList就好了?



  • @东岳 对,我后来是用List<type>解决的。最后用List来初始化UList

    List<label> IBMarks(50,(label)1);
    labelUList affectedList(IBMarks);
    Info << affectedList<<endl;
    Info << affectedList[25]<<endl;
    

    结果如下

    50{1}
    1
    

    v_感觉是类似数组头的指针,运算符[]可能被重载了,可以直接取值,就像我上面的affectedList[25],输出为1。
    另外我原来


Log in to reply