This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 编译器/TMS320C6745:用于C+11的STL矢量

Guru**** 2558250 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/589399/compiler-tms320c6745-stl-vector-for-c-11

部件号:TMS320C6745

工具/软件:TI C/C++编译器

尊敬的先生:

 我知道TI编译器只支持c+03和c+98

http://processors.wiki.ti.com/index.php/C%2B%2B_Support_in_TI_Compilers#Status_as_of_March_2014

但是,我们的提供程序使用C++ STL向量,并且它们大量使用std:vector::data(),而后者仅在C+11中用于其算法。

而我们的提供者只在向量中使用简单类型,如char,int,long等。

我阅读了CGT6X 8.0 v.3中的矢量实现,并确保其中没有数据实现。

但是,在读取实现后,如果只使用简单类型,是否可以使用std::vector::begin()返回的迭代器内存。

如果我们不能使用std::vector::begin(),那么是否有任何简单的解决方案可以使我们使用函数std:vector::data()?

此致,

/ckhsu

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    由引导程序成员函数Begin()返回的类型是'random access iterator',它不允许立即访问包含在引导程序中的数据。


    但是,C+03提供'FRONT’函数,该函数返回对向量第一个元素的引用。

    由于矢量保证其元素的连续存储,所以vector::FRONT ()的地址可用作指向存储在中的数据的指针。 例如:

    #include <vector>
    #include <iostream>
    using namespace std;
    
    int main(){
    //初始化简单矢量
    STD::矢量<int> v;
    V. push_back (1);
    V. push_back (2);
    V. push_back (3);
    V. push_back (4);
    
    //提取对向量中第一个元素的引用
    int &ra = v.front();
    //获取向量中第一个元素的地址
    INT *PA =&RA;
    
    用于(int i = 0;i < 4;I++)
    {
    //打印每个元素的值和地址
    int val =*pa;
    size_t addr =(size_t)(pa++);
    cout << addr <<"<< val << endl;
    }
    } 

    请注意,如果向量的元素类型变得更加复杂,例如类,则上述示例可能会出现问题,因为该类可能会使一元地址(&)运算符过载,从而使其不返回指向自身的指针。


    最后,您可以在自己的代码中创建一个帮助程序,为该操作提供快捷方式:

    命名空间ti_Helper {
    模板<typename E>
    e *data(std::vector<E>&VEC){
    返回&( vec.front());
    }
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的先生:
    非常感谢,我将尝试此解决方案。

    此致,
    /ckhsu