【问题标题】:I am making a c++ code and error occurs I don't know why [closed]我正在编写 C++ 代码并发生错误我不知道为什么 [关闭]
【发布时间】:2017-08-18 12:17:51
【问题描述】:

不知道我的问题出在哪里。我尝试编译一次代码并且它工作。但是,我复制到一个新项目中为了修改它,只是颜色或等待的时间,它只适用于第一个程序。怎么了?我感到非常沮丧。使用此代码,我想绘制正弦函数。这是我的代码:

#include <bits/stdc++.h>

using namespace std;
int main()
{
    int t,n1,n2,res=0;
    cin>>t;
    vector<int> v1;
    vector<int> v2;
    while (t--) {
        cin>>n1>>n2;
        v1.push_back(n1);
        v2.push_back(n2);
    }
    for (int i=v1.size();i>0;i++) {
        bool state=binary_search(v2.begin(),v2.end(),v1[i-1]);
        if (state){
            v1.pop_back();
            res++;
        }
    }
    cout<<res<<endl;
    return 0;
}

error of the console

【问题讨论】:

  • #include &lt;bits/stdc++.h&gt; 不要那样做!
  • 看看你的for循环。它曾经评估为假吗?
  • 确定你的 for 循环中的这些条件? for (int i=v1.size();i&gt;0;i++){

标签: c++ vector console codeblocks


【解决方案1】:

改变

for (int i=v1.size();i>0;i++)

到

for (int i=v1.size();i>0;i--)

否则你会在边界后面访问 -> UB.

甚至到内存中的另一个段 -> SIGSEGV.


还有std::binary_search 说:

“...完全排序的范围符合这些标准。”

所以在致电binary-search 之前,您必须这样做

std::sort (v2.begin(), v2.end());

【讨论】:

    【解决方案2】:

    for语句有错别字

    for (int i=v1.size();i>0;i++) {
                             ^^^
    

    显然你的意思是

    for (int i=v1.size();i>0;i--) {
                             ^^^
    

    for 语句最好写成这样

    for ( auto i = v1.size(); i != 0; i-- ) {
          ^^^^
    

    但是无论如何程序都是错误的。

    首先在使用std::binary_search方法之前,你必须对向量v2进行排序。

    第二个问题是这个调用

    v1.pop_back();
    

    不必删除向量v2 中找到的向量v1 的元素。它可以只删除向量v1 的最后一个元素,该元素甚至不存在于向量v2 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2018-12-19
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多