gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:33 24 4
gpt4 key购买 nike

我必须维护一个自 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com