c++ - 如何将 vector<int> 转换为 int*

标签 c++

我必须维护一个自 2004 年以来就没有人碰过的程序。

class CSolver
{  
 ...  
 ClauseIdx add_clause (int * lits, int n_lits);
}

void and2 (CSolver & solver)   
{  
vector <int> lits;  
...  
solver.add_clause(lits.begin(), lits.size());  
}

编译器提示:

error: no matching function for call to ‘CSolver::add_clause(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, size_t)’

我试着施放它

solver.add_clause((int*)lits.begin(), lits.size());

但还是有提示:

error: invalid cast from type ‘__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >’ to type ‘int*’

我想快速解决这个问题,因为更改 CSolver 的界面会导致 改变整个程序。

提前致谢。

最佳答案

像这样:

solver.add_clause(lits.data(), lits.size());

不要在不了解自己在做什么的情况下添加转换。

该函数需要一个 int 数组,它通过指向第一个元素的指针和一个大小来请求它们。这是一个常见的 C 约定。

幸运的是,std::vector 将元素精确地存储为连续数组,因此我们可以获得指向第一个元素的指针 (lits.data()&lits[0]&lits.front() 等),然后只传递大小。

关于c++ - 如何将 vector<int> 转换为 int*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18750610/

相关文章:

c++ - C++中this指针的使用

c++ - PARITY_NONE C++ Windows 中的关键字?

c++ - 从多个组件构建一个 C++ 类

c++ - 如何在 3D 中放置一个点以使其形成一定的角度?

c++ - 广义 lambda 捕获的宏

c++ - 对数组进行排序并维护元素的旧索引

c++ - 程序在具有有效用户定义对象的 Skill.h 文件中生成 "error C4430: missing type specifier - int assumed."错误消息

c++ - 关于C++中函数定义的一个问题

c++ - Qt 4.8 与 Visual Studio 2010 的链接错误

c++ - DirectX 11中立方体网格的渲染不正确