gpt4 book ai didi

c++ - 取消引用字符迭代器

转载 作者:太空狗 更新时间:2023-10-29 20:40:17 24 4
gpt4 key购买 nike

我是 C++ 的新手,刚刚学习了迭代器。我有这段代码:

//lines is a vector<string>
for (auto it = lines.begin(); it != lines.end(); ++it) {
//I want to access each characters in each element (string) of the vector
for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) {
cout << *it2 << endl; //error: invalid type argument of unary '*' (have 'char')
}
cout << *it << endl; //ok
}

我测试了将字符串分配给变量:

string word = *it;
for (auto it2 = word.begin(); it2 != word.end(); ++it2) {
cout << *it2 << endl; //ok
}

我的问题是为什么第二个代码有效而第一个无效?在我看来 *it2 是一个字符串,我可以使用迭代器访问其中的字符,但事实证明我必须将它分配给一个变量才能工作。我不明白编译器错误。有什么区别?

最佳答案

其实问题出在上面那行

for (auto it2 = *it->begin(); it2 != *it->end(); ++it2) {

auto 的类型实际上转换为 char,因为您过早地取消了对迭代器的引用。 *it->begin() 实际上接受 string.begin() 并取消引用它,返回一个 char。要修复,只需从 for 语句中删除迭代器取消引用,如下所示:

for (auto it2 = it->begin(); it2 != it->end(); ++it2) {

关于c++ - 取消引用字符迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702953/

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