gpt4 book ai didi

c++ - 我应该如何将此 std::array<> 传递给函数?

转载 作者:搜寻专家 更新时间:2023-10-31 01:12:07 26 4
gpt4 key购买 nike

std::array<LINE,10> currentPaths=PossibleStrtPaths();
LINE s=shortestLine(currentPaths); //ERROR

LINE CShortestPathFinderView::shortestLine(std::array<LINE,10> *currentPaths)
{
std::array<LINE,10>::iterator iter;

LINE s=*(currentPaths+1); //ERROR

for(iter=currentPaths->begin()+1;iter<=currentPaths->end();iter++)
{
if(s.cost>iter->cost)
s=*iter;
}

std::remove(currentPaths->begin(),currentPaths->end(),s);

//now s contains the shortest partial path
return s;


}

在这两个语句中,我都遇到了相同的错误:no suitable conversion from std::array<LINE,10U>*currentPaths to LINE .为什么会这样?我应该以另一种方式传递数组吗?我也试过将 currentPaths 作为引用传递,但它告诉我无法初始化该类型的引用。

最佳答案

你说你尝试了一个引用但失败了。我不知道为什么,因为这是正确的做法。

LINE CShortestPathFinderView::shortestLine(std::array<LINE,10> &currentPaths);

听起来,您还使用了临时变量的引用。这是错误的。

std::array<LINE,10>& currentPaths = PossibleStrtPaths(); // WRONG
std::array<LINE,10> currentPaths = PossibleStrtPaths(); // RIGHT
LINE s = shortestLine(currentPaths);

最后,第一个元素是数字零。当您进行数组访问时,下标运算符 [] 是首选。所以:

LINE s = currentPaths[0];

但您也可以轻松地从迭代器中获取第一项。

最终代码:

/* precondition: currentPaths is not empty */
LINE CShortestPathFinderView::shortestLine(std::array<LINE,10>& currentPaths)
{
std::array<LINE,10>::iterator iter = currentPaths.begin();
LINE s = *(iter++);

for(; iter != currentPaths->end(); ++iter) {
if(s.cost>iter->cost)
s=*iter;
}

std::remove(currentPaths.begin(), currentPaths.end(), s);

//now s contains the shortest partial path
return s;
}

关于c++ - 我应该如何将此 std::array<> 传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14070756/

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