C++;函数查找向量中的当前数 我需要对我的作业解释:/我需要在C++中写一个函数,它需要3个ARG(向量切片和int的初始和最后迭代器),并返回向量中第一个找到的int(第三个ARG)的const迭代器。如果这个int不在我们的向量中,我们应该返回const final vector迭代器。此函数使用迭代器而不是索引,并且仅使用“向量头”。这是一个示例程序 int main() { const std::vector<int> vector {3, -1, 7, 12, -5, 7, 10}; std::cout << find(vector.begin() + 3, vector.end(), 7) - vector.begin() << std::endl; } intmain(){ 常数std::向量{3,-1,7,12,-5,7,10}; std::cout

C++;函数查找向量中的当前数 我需要对我的作业解释:/我需要在C++中写一个函数,它需要3个ARG(向量切片和int的初始和最后迭代器),并返回向量中第一个找到的int(第三个ARG)的const迭代器。如果这个int不在我们的向量中,我们应该返回const final vector迭代器。此函数使用迭代器而不是索引,并且仅使用“向量头”。这是一个示例程序 int main() { const std::vector<int> vector {3, -1, 7, 12, -5, 7, 10}; std::cout << find(vector.begin() + 3, vector.end(), 7) - vector.begin() << std::endl; } intmain(){ 常数std::向量{3,-1,7,12,-5,7,10}; std::cout,c++,c++11,vector,iterator,C++,C++11,Vector,Iterator,将其分解,我看到一个编译器错误和一个警告(逻辑错误)以及一个编译器未公开的逻辑错误 在 足以消除错误。这将导致逻辑错误 for(vector<int>::iterator iterator = begin; iterator != end;) 不要让迭代器前进,让循环看起来比第一个值更多 for(/*do nothing here*/; begin != end; ++begin) 处理好了 这就给我们留下了编译器警告。永远不要忽略警告。程序员往往懒惰且沉迷于速度。如果消息不重要

将其分解,我看到一个编译器错误和一个警告(逻辑错误)以及一个编译器未公开的逻辑错误

足以消除错误。这将导致逻辑错误

for(vector<int>::iterator iterator = begin; iterator != end;)
不要让迭代器前进,让循环看起来比第一个值更多

for(/*do nothing here*/; begin != end; ++begin)
处理好了

这就给我们留下了编译器警告。永远不要忽略警告。程序员往往懒惰且沉迷于速度。如果消息不重要,他们不会付出努力,并承担打印消息的性能损失。编译器错误意味着语法错误,代码无法转化为程序mpiler警告意味着语法正确,并且在没有其他错误的情况下,代码可以转换为程序,但程序在逻辑上可能不正确。永远不要忽略警告。尽可能消除它们。如果无法消除,请证明您获得了所需的行为并证明其正确性。只是不要忽略它们

警告应该类似于函数
find
不会在所有路径上返回值

注意:我已经将代码调整为。我发现它的大括号位置和非常规则的流程使得放错或缺少括号和范围错误很容易被发现。如果您在语法方面有问题,这种样式可以消除可能的混淆源,并让您专注于其他问题

vector<int>::const_iterator find(vector<int>::const_iterator begin, 
                                 vector<int>::const_iterator end, 
                                 int num) 
{
    for(/*do nothing here*/; begin != end; ++begin)
    {
        if (*begin== num)
        {
            return begin;
        } 
        else 
        {
            return end;
        }
    }
}
为了简洁起见,可以对其进行改进,但我相信会产生最容易理解的代码。短代码很好,但编译器将其转换为与短代码相同的程序的易于阅读的代码在我看来更有价值

旁注:

为变量指定与其类型相同的名称是有风险的

vector<int>::iterator iterator

string
,类型为
string
的变量,当
string
再次被
string name
使用时,使用名称
string
使
string
无法访问该类型。可怜的编译器认为有人告诉它将一个变量设置为另一个变量的类型。这也是的一个很好的例子de>std::string;将使整个问题变得不可能,至少对于
std
命名空间中的类型是这样。

您忘了问一些问题:-)问题出在哪里?对我来说这是一个很好的开始。别忘了实际增加迭代器!
++iterator
缺失。为什么您[尝试]中途从
const\u iterator
切换到
iterator
吗?重新考虑一下
else
。目前的代码是,如果我第一次没有找到数字,我就放弃了……要找到好老师太难了,你的答案也很好,因为现在我了解更多了!谢谢:)
for(/*do nothing here*/; begin != end;)
for(vector<int>::iterator iterator = begin; iterator != end;)
for(/*do nothing here*/; begin != end;)
for(/*do nothing here*/; begin != end; ++begin)
vector<int>::const_iterator find(vector<int>::const_iterator begin, 
                                 vector<int>::const_iterator end, 
                                 int num) 
{
    for(/*do nothing here*/; begin != end; ++begin)
    {
        if (*begin== num)
        {
            return begin;
        } 
        else 
        {
            return end;
        }
    }
}
vector<int>::const_iterator find(vector<int>::const_iterator begin, 
                                 vector<int>::const_iterator end, 
                                 int num) 
{
    for(/*do nothing here*/; begin != end; ++begin)
    {
        if (*begin == num)
        {
            return begin;
        } 
    }
    return end;
}
vector<int>::iterator iterator
string string; 
string name; // inscrutable error message here.