gpt4 book ai didi

c++ - 如何在 C++11 的迭代器中获取有关 auto 标识符的更多详细信息

转载 作者:行者123 更新时间:2023-11-30 01:13:06 26 4
gpt4 key购买 nike

 void test()
{
vector <string> s={"hello world"};
for(vector<string>::iterator it=s.begin();it!=s.end()&&!it->empty();it++)
{
for(auto it2=it->begin();it2!=it->end();it2++)//I don't konw type of it2
{
*it2=toupper(*it2);
}
cout<<*it<<endl;
}
}

在第一个循环中,我可以确定类型的迭代器是 vector<string>::iterator .我想知道 it2 的类型是什么(我已经尝试使用 vector<string>::const )。我怎样才能得到关于哪种类型的更多细节 auto相等。

最佳答案

itvector<string> 的迭代器.这意味着 it “指向”string .所以当你写 it->begin()it->end() ,您正在遍历 string , 这将使 it2有类型 std::string::iterator .正如 Yakk 的评论中巧妙指出的那样和 Mr. Wakely ,这种类型无关紧要。它只是“指向”char 的事物的类型我们可以用它迭代我们的 string .这是auto的主要卖点之一- 如果类型的名称无关紧要,请不要用它弄乱您的代码。

请注意,由于您在代码中实际上从来不需要迭代器,因此您可以简单地使用基于范围的 for 循环来避免它们:

for (auto& str : s) {
for (auto& chr: str) {
chr = toupper(chr);
}
}

或者,如果您需要知道某物的确切类型,我建议您使用以下 hack。创建一个采用类型但从未定义的类模板:

template <typename > struct TD; // for Type Description

然后把它贴在某个地方:

for (auto it2 = ... ) {
TD<decltype(it2)> t;
// ...
}

在 gcc 5.2 中会出现以下错误:

main.cpp:16:34: error: aggregate 'TD<__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> > > t' has incomplete type and cannot be defined
TD<decltype(it2)> t;
^

注意编译错误的完整类型是it2

关于c++ - 如何在 C++11 的迭代器中获取有关 auto 标识符的更多详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32826746/

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