Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以用这种方式将数组转换为指针并将指针返回到常量吗?_C++_Arrays_Function_Pointers - Fatal编程技术网

C++ 我可以用这种方式将数组转换为指针并将指针返回到常量吗?

C++ 我可以用这种方式将数组转换为指针并将指针返回到常量吗?,c++,arrays,function,pointers,C++,Arrays,Function,Pointers,我可以用这种方式将数组转换为指针并将指针返回到常量吗?它在内存分配方面是正确的吗 const int* convert_vector_to_pointer(std::vector<std::pair<int, int> >& v) { std::vector<std::pair<int, int> >::iterator it = v.begin(); int* a = new int[2*v.size()]; in

我可以用这种方式将数组转换为指针并将指针返回到常量吗?它在内存分配方面是正确的吗

const int* convert_vector_to_pointer(std::vector<std::pair<int, int> >& v)
{
    std::vector<std::pair<int, int> >::iterator it = v.begin();
    int* a = new int[2*v.size()];
    int i = 0;
    for(; it != v.end(); ++it)
    {
        if(i < 2*v.size())
        {
            a[i] = (*it).first;
            a[i + 1] = (*it).first;
            i += 2;
        }
    }
    const int* b = const_cast<const int*>(a);
    return b;
}
const int*将向量转换为指针(std::vector&v)
{
std::vector::iterator it=v.begin();
int*a=新的int[2*v.size()];
int i=0;
for(;it!=v.end();++it)
{
如果(i<2*v.size())
{
a[i]=(*it)。首先;
a[i+1]=(*it);
i+=2;
}
}
常数int*b=常数(a);
返回b;
}

函数的问题是在函数中分配数组,并返回指向该数组的
const
指针。任何一个本身都可以,但总的来说,这意味着调用代码将被赋予
delete
ing一个
const
对象的任务,这是未定义的行为。因此,不,您的示例并不完全正确。

函数的问题在于,您在函数中分配数组,并返回指向该数组的
const
指针。任何一个本身都可以,但总的来说,这意味着调用代码将被赋予
delete
ing一个
const
对象的任务,这是未定义的行为。因此,不,您的示例并不正确。

您最好只返回一个
std::vector
,并跳过所有动态分配垃圾。要清除某些内容,变量
a
不是数组。它可以用作数组,就像正确的数组可以用作指针一样。为什么不改用
std::vector
(和
const std::vector
)呢?Qt中有一个函数,它需要QPolygon pol的const Int*参数;pol.设定点(2,阵列)。函数的形式为void设置点(int nPoints,const int*points),您最好只返回一个
std::vector
,并跳过所有动态分配垃圾。要清除某些内容,变量
a
不是数组。它可以用作数组,就像正确的数组可以用作指针一样。为什么不改用
std::vector
(和
const std::vector
)呢?Qt中有一个函数,它需要QPolygon pol的const Int*参数;pol.设定点(2,阵列)。函数的形式为空设定点(int nPoints,const int*points)