Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符串向量上的迭代器,作为控制台的输入获取,给出分段错误_C++_Templates_C++11_Iterator_Segmentation Fault - Fatal编程技术网

C++ 字符串向量上的迭代器,作为控制台的输入获取,给出分段错误

C++ 字符串向量上的迭代器,作为控制台的输入获取,给出分段错误,c++,templates,c++11,iterator,segmentation-fault,C++,Templates,C++11,Iterator,Segmentation Fault,我这里有两个不同的程序,它们都创建一个字符串的BST,然后检查BST中是否有给定的字符串 当我将字符串向量的迭代器的解引用传递给find函数时,第一个程序运行良好 但是第二个程序失败了,当我从用户那里获取一个输入,然后将迭代器的解引用传递给该输入字符串的向量时,就会出现分段错误 为什么当我从用户那里得到输入时它会失败 工作程序 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main() { 向量vn; 设定名称; BST b2; vn.推回(“AAA”); vn.

我这里有两个不同的程序,它们都创建一个字符串的BST,然后检查BST中是否有给定的字符串

当我将字符串向量的迭代器的解引用传递给find函数时,第一个程序运行良好

但是第二个程序失败了,当我从用户那里获取一个输入,然后将迭代器的解引用传递给该输入字符串的向量时,就会出现分段错误

为什么当我从用户那里得到输入时它会失败

工作程序
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
向量vn;
设定名称;
BST b2;
vn.推回(“AAA”);
vn.推回(“BBB”);
vn.推回(“CCC”);
向量::迭代器vit=vn.begin();
对于(;vit!=vn.end();vit++)
{
b2.插入(*vit);
姓名。插入(*vit);
}
vit=vn.begin();
对于(;vit!=vn.end();++vit)
{
如果(*(b2.查找(*vit))!=*vit)
{
cout数据
返回迭代器(currentNode);
}
}
返回端();
}
这错误地处理了
find
找不到任何东西的情况。如果找不到该值,
find
将迭代器返回到容器末尾的迭代器,然后应用该迭代器。哎呀


这错误地处理了
find
找不到任何东西的情况。如果找不到该值,
find
将迭代器返回到容器末尾的迭代器,然后应用该迭代器。哎呀。

代码中的信息不够多,但是如果find函数没有找到任何内容,则
*(b2.find(*vit2))
将遵从结束迭代器,这是个坏消息。谢谢。有什么办法处理这个问题吗?另外,在第二个程序中,即使在BST中找到字符串,它也会给出一个分段错误。即使在BST中找到字符串,它也会给出一个分段错误。如果这不是家庭作业,那么只需使用
无序集
。我不明白。您能解释一下吗?您的代码中没有足够的信息,但是如果find函数没有找到任何内容,它看起来将遵从end迭代器,这是个坏消息。谢谢。有什么办法处理这个问题吗?另外,在第二个程序中,即使在BST中找到字符串,它也会给出一个分段错误。即使在BST中找到字符串,它也会给出一个分段错误。如果这不是家庭作业,那么只需使用
无序集
。我不明白。你能解释一下吗?谢谢。我该怎么处理?你能帮我处理代码吗?而且,即使在BST@temp在取消引用之前,将
find
的结果与
end
的结果进行比较。另外,学习如何排除分段故障。谢谢。我该怎么处理?你能帮我处理代码吗?而且,即使在BST@temp在取消引用之前,将
find
的结果与
end
的结果进行比较。另外,了解如何排除分段故障。
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
#include<typeinfo>
using namespace std;

int main() 
{

    vector<std::string> vn;
    set<std::string> names;
    BST<std::string> b2;

    vn.push_back("AAA");
    vn.push_back("BBB");
    vn.push_back("CCC");

    vector<std::string>::iterator vit = vn.begin();
    for(; vit != vn.end(); vit++)
    {
         b2.insert(*vit);
         names.insert(*vit);
    }

    vit = vn.begin();
    for(; vit != vn.end(); ++vit) 
    {
         if(*(b2.find(*vit)) != *vit) 
         {
              cout << "Incorrect return value when finding " << *vit;
              return -1;
         }
    }
}
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
#include<typeinfo>
using namespace std;

int main() 
{

    vector<std::string> vn;
    set<std::string> names;
    std::string cur_str;
    BST<std::string> b2;

    vn.push_back("AAA");
    vn.push_back("BBB");
    vn.push_back("CCC");


    vector<std::string>::iterator vit = vn.begin();
    for(; vit != vn.end(); vit++)
    {
         b2.insert(*vit);
         names.insert(*vit);
    }

    std::getline(std::cin, cur_str);
    vector<std::string> vn2;
    vn2.push_back(cur_str);
    vector<std::string>::iterator vit2 = vn2.begin();

    vit = vn.begin();
    for(; vit != vn.end(); ++vit) 
    {
         if(*(b2.find(*vit2)) != *vit) (gives segmentation fault in this line)
         {
              cout << "Incorrect return value when finding " << *vit << endl;
              return -1;
         }
    }
}
template<typename Data> (Declared at the beginning)
iterator find(const Data& item) const
{
    BSTNode<Data> * currentNode = root;
    while(NULL != currentNode) 
    {
        if(item < currentNode->data) 
        {
            currentNode = currentNode->left;
        }
        else if(currentNode->data < item)
        {
            currentNode = currentNode->right;
        }
        else 
        {
             // item == currentNode->data
             return iterator(currentNode);
        }
    }
return end();
 }
     if(*(b2.find(*vit2)) != *vit) (gives segmentation fault in this line)