我有以下功能:
/* Calculate if there is an intersection with given intial position and
direction */
vector<double> intersection(vector<double> startPos, vector<double> direction)
{
if(there is intersection)
return (intersection coordinates);
else {
return NULL;
}
}
我是否可以执行此操作并检查NULL
是否存在交叉点:
vector<double> v = intersection(pos, dir);
if(v == NULL)
/* Do something */
else
/* Do something else */
如果不允许这样做/编码不好,我可以采取另一种方式吗?
答案 0 :(得分:4)
NULL
实际上只是指针的概念。由于我们有一个容器,我们可以检查其他内容,即容器是否为empty
。如果是,那么我们知道我们没有元素,如果不是,那么我们知道有东西要处理。这可以让你编写像
vector<double> intersection(vector<double> startPos, vector<double> direction)
{
if(there is intersection)
return (intersection coordinates);
else {
return {}; // this means return a default constructed instance
}
}
然后你可以像
一样使用它vector<double> v = intersection(pos, dir);
if(v.empty())
/* Do something */
else
/* Do something else */
另请注意,如果您想获得一个交叉点,可以使用std::set_intersection
并使用它
#include <iostream> #include <vector> #include <algorithm> #include <iterator> int main() { std::vector<int> v1{1,2,3,4,5,6,7,8}; std::vector<int> v2{ 5, 7, 9,10}; std::sort(v1.begin(), v1.end()); std::sort(v2.begin(), v2.end()); std::vector<int> v_intersection; std::set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v_intersection)); for(int n : v_intersection) std::cout << n << ' '; }
输出:
5 7