我必须将复杂数据从C++传递给C函数.在C++中,数据自然存储在一个
std::vector<std::complex> c.C函数期望数据为double的数组,double a[]例如a [0] = Re(c [0]),a [1] = Im(c [0]),a [2] = Re(c [1 ])等
传递此类数据的最佳安全方法是什么?像铸造一样
(double*) (&c[0])
Run Code Online (Sandbox Code Playgroud)
惹麻烦?
很抱歉,如果这是重复的,我只能找到有关将C++复合体传递给C99复合体的相关问题的信息.
我有一个比一个int或指针更重的迭代器(它意味着在一个三维周期格子中迭代一个站点的最近邻居,所以它必须包含某些私有支持结构).要判断迭代器是否位于容器的末尾,我只需要进行一次比较,但要创建一个指向过去一端的迭代器,我还必须创建支持结构.
因此我想我可以让end()容器的方法返回一个int,然后重载operator==()以避免创建一个完整的一个过去的迭代器. 这个答案暗示这可能是一个好主意.对于双向迭代器,似乎这是错误的,因为我后来知道(例如从这个问题),无论什么end()返回必须可以减少到最后一个元素.
由于我的迭代器只是向前,我认为它仍然可以,但现在我发现我不能使用std::find()(可能还有其他STL算法),它需要两个相同(迭代器)类型的参数.
所以,我的问题是:end()返回的类型是否begin()违反标准行为?这是个坏主意吗?