在 C++ 中迭代包含指针的向量
Iterating over a vector containing pointers in c++
我得到了一个函数,它接受指向 rapidjson::Value 类型的指针并将该位置的项目存储到类型为 kArrayType 的 rapidjson::Value 中。
void addBlock(rapidjson::Value* block) {
blocksArray.PushBack(*block, allocator);
}
此功能按预期工作。
为了扩展这个,我想添加一个函数,可以将这些指针的向量作为输入。我试过这样做:
void addBlocks(std::vector<rapidjson::Value*> blocks) {
for (const rapidjson::Value& block : blocks) {
blocksArray.PushBack(*block, allocator);
}
}
但这不起作用。它在 Visual Studio.
中给了我两个红色波浪
函数参数声明中块下的第一个,表示:
C++ no suitable constructor exists to convert from to...
在对 PushBack()
的调用中 * 下面的第二个说:
C++ no operator matches these operands operand types are: * const
rapidjson::Value
我的猜测是我正在做一些非常基本的错误,我只是错过了。
看来你是在复制,为什么不使用一些std算法呢?
void addBlocks(std::vector<rapidjson::Value*> blocks) {
std::transform(
blocks.begin(),
blocks.end(),
std::back_inserter(blocksArray),
[](rapidjson::Value* ptr){ return *ptr; });
}
您的矢量包含指针。这些不能自动转换为引用。
循环变量需要是指针的引用:
for (rapidjson::Value *& block : blocks)
{
blocksArray.PushBack(*block, allocator);
}
很确定这就是 "auto" 在幕后所做的(如果编译器没有完全优化它)。
不确定是否允许您保留 "const"。当我用整数尝试时它没有。
您可以使用 auto
关键字迭代块向量:
for (auto block : blocks) {
...
}
我得到了一个函数,它接受指向 rapidjson::Value 类型的指针并将该位置的项目存储到类型为 kArrayType 的 rapidjson::Value 中。
void addBlock(rapidjson::Value* block) {
blocksArray.PushBack(*block, allocator);
}
此功能按预期工作。
为了扩展这个,我想添加一个函数,可以将这些指针的向量作为输入。我试过这样做:
void addBlocks(std::vector<rapidjson::Value*> blocks) {
for (const rapidjson::Value& block : blocks) {
blocksArray.PushBack(*block, allocator);
}
}
但这不起作用。它在 Visual Studio.
中给了我两个红色波浪函数参数声明中块下的第一个,表示:
C++ no suitable constructor exists to convert from to...
在对 PushBack()
的调用中 * 下面的第二个说:
C++ no operator matches these operands operand types are: * const rapidjson::Value
我的猜测是我正在做一些非常基本的错误,我只是错过了。
看来你是在复制,为什么不使用一些std算法呢?
void addBlocks(std::vector<rapidjson::Value*> blocks) {
std::transform(
blocks.begin(),
blocks.end(),
std::back_inserter(blocksArray),
[](rapidjson::Value* ptr){ return *ptr; });
}
您的矢量包含指针。这些不能自动转换为引用。 循环变量需要是指针的引用:
for (rapidjson::Value *& block : blocks)
{
blocksArray.PushBack(*block, allocator);
}
很确定这就是 "auto" 在幕后所做的(如果编译器没有完全优化它)。
不确定是否允许您保留 "const"。当我用整数尝试时它没有。
您可以使用 auto
关键字迭代块向量:
for (auto block : blocks) {
...
}