作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须维护一个自 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/
我是一名优秀的程序员,十分优秀!