如何将vector <int>转换为int*

qsp*_*qsp 4 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());  
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说:

错误:没有匹配函数来调用'CSolver :: add_clause(__ gnu_cxx :: __ normal_iterator <int*,std :: vector <int,std :: allocator <int >>>,size_t)'

我试着去投它

solver.add_clause((int*)lits.begin(), lits.size());
Run Code Online (Sandbox Code Playgroud)

但仍有一个抱怨:

错误:从类型'__gnu_cxx :: __ normal_iterator <int*,std :: vector <int,std :: allocator <int >>>>'输入无效,以输入'int*'

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

提前致谢.

GMa*_*ckG 11

像这样:

solver.add_clause(lits.data(), lits.size());
Run Code Online (Sandbox Code Playgroud)

不要在不了解你正在做什么的情况下添加演员阵容.

该函数需要一个ints 数组,它通过指向第一个元素的指针和大小来询问它们.这是一个常见的C约定.

幸运对我们来说,std::vector存储元件精确地为连续的阵列,所以我们可以得到一个指针的第一个元素(lits.data(),&lits[0],&lits.front(),等),然后只传递的大小.


tom*_*ahh 7

如果您可以针对c ++ 11进行编译,则可以使用

solver.add_clause(lits.data(), lits.size());
Run Code Online (Sandbox Code Playgroud)

http://en.cppreference.com/w/cpp/container/vector/data