gpt4 book ai didi

c++ - 在 C++ 中使用访问器引用 vector 进行迭代

转载 作者:太空狗 更新时间:2023-10-29 23:38:39 27 4
gpt4 key购买 nike

我正在尝试迭代对函数内字符串 vector 的引用。代码最初遍历 vector 的内部拷贝,但如果可能的话,我想遍历原始拷贝。但是,当我尝试这样做时,我遇到了类型不匹配问题。

我试图通过设置和打印迭代器的一部分来处理它,但是我在初始化和使用 %s 格式说明符打印时都遇到了类似的类型不匹配。在 gdb 内部,打印开始访问器对于对 vector 的引用或对它自己的 vector 的拷贝的作用相同。

外面:

std::vector<std::string> foo;
foo.pushback('alpha');
foo.pushback('bravo');
func(foo);

内部复制:

void func(const std::vector<std::string> &bar){

std::vector<std::string> barcopy = bar;

for (std::vector<std::string>::iterator barIt = barcopy.begin(); barIt != barcopy.end(); barIt++){
//operations with the string inside barcopy
}
}

没有复制的内部:

void func(const std::vector<std::string> &bar){
for (std::vector<std::string>::iterator barIt = bar.begin(); barIt != bar.end(); barIt++){
//operations with the string inside bar
}
}

我希望引用的行为与拷贝相同,但在尝试编译时直接尝试这样做会得到以下信息。

error: conversion from 
'__gnu_cxx::__normal_iterator<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >'
to non-scalar type
'__gnu_cxx::__normal_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >'
requested

当对 vector 的引用执行时,begin 访问器返回什么类型?如何在不复制的情况下迭代此引用?

最佳答案

因为你正在通过 bar作为const引用,你需要改变:

for (std::vector<std::string>::iterator barIt = bar.begin(); barIt != bar.end(); barIt++)

到:

for (std::vector<std::string>::const_iterator barIt = bar.cbegin(); barIt != bar.cend(); barIt++)

或者,更好的是,使用范围 for 循环,如果您只想遍历 vector 中的元素:

for (auto &elem : bar)

或者,将函数签名更改为 void func(std::vector<std::string> &bar) (没有 const )。范围 for 循环在任何一种情况下都适用。

关于c++ - 在 C++ 中使用访问器引用 vector 进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066590/

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