gpt4 book ai didi

c++ - BOOST_FOREACH 指针 vector

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:42 24 4
gpt4 key购买 nike

我想使用 BOOST_FOREACH 宏来迭代我的 vector 中的一堆值。 vector 看起来像这样:

struct _Element
{
int key;
// more variables here
}

elements = new std::vector<_Element *>;

我是 C++ 的新手,我对如何实际迭代包含的 _Element * 感到有点困惑。为什么这行不通?

BOOST_FOREACH(_Element *currentElem, rootElement->_document->elements)
{
// do stuff
}

编译这个给我一个错误:

shared.cc:146:37: error: no viable conversion from 'std::__1::vector<_Element *, std::__1::allocator<_Element *> >' to '_Element *'
BOOST_FOREACH(_Element *currentElem, rootElement->_document->elements)
~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

最佳答案

elements 的类型是vector<_Element *>* , 所以你需要在将它传递给 BOOST_FOREACH 之前取消引用它.

BOOST_FOREACH(_Element *currentElem, *(rootElement->_document->elements))
{
// do stuff
}

这将修复编译错误,但由于您是 C++ 的新手,因此很有可能您不需要声明的所有那些指针。例如,您的代码可能应该如下所示:

struct Element            // do not use leading underscore followed by 
// uppercase letter, that's reserved
{
int key;
// more variables here
};

std::vector<Element> elements = std::vector<Element>;
// vector of Element, not Element*. And elements is a vector, not vector *

最后,如果你有一个支持 C++11 基于范围的编译器 for你不需要 BOOST_FOREACH .

for(auto&& currentElem : rootElement.document.elements)
// notice that I've gotten rid of all the pointers within rootElement
{
// currentElem is a reference to the current element in the elements vector
}

关于c++ - BOOST_FOREACH 指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23999428/

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