相关疑难解决方法(0)

上限/下限不像我预期的那样工作,不明白为什么

这是代码.结果我得到"4 4".不明白为什么它不是"2 4"(根据下限和上限的'defenitions).

#include <bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> v = {1, 2, 4, 5};
    vector<int>::iterator s , f;
    s = lower_bound(v.begin(), v.end(), 3);
    f = upper_bound(v.begin(), v.end(), 3);
    cout << (*s) << " " << (*f);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ lower-bound upperbound

2
推荐指数
1
解决办法
123
查看次数

为什么该程序出现分段错误?

我目前正在尝试解决学习C ++入门课程的编码挑战,而我只是想了解我遇到的分段错误。

我正在编写一个给定的函数,将节点插入到链表的末尾。这个想法是,给定整数输入,第一个输入将被视为列表末尾的一部分,因为它的指针成员变量为nullptr。之后,必须附加所有其他输入,以便它们的插入发生在该空节点之前。

这是函数的第一部分:

SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) {


if(head == nullptr) //if the list is empty
{
    head -> next = new SinglyLinkedListNode(data);
    return head;
}

return head;

} 
Run Code Online (Sandbox Code Playgroud)

但是函数的这一部分给了我一个分段错误错误:

head -> next = new SinglyLinkedListNode(data);
Run Code Online (Sandbox Code Playgroud)

这些是类声明:

#include <bits/stdc++.h>

using namespace std;

class SinglyLinkedListNode {
 public:
    int data;
    SinglyLinkedListNode *next;

    SinglyLinkedListNode(int node_data) {
        this->data = node_data;
        this->next = nullptr;
    }
     };

class SinglyLinkedList {
public:
    SinglyLinkedListNode *head;

    SinglyLinkedList() {
        this->head = nullptr;
    }

 };
Run Code Online (Sandbox Code Playgroud)

和主要:

int …
Run Code Online (Sandbox Code Playgroud)

c++ linked-list segmentation-fault

2
推荐指数
1
解决办法
87
查看次数

为什么必须在第一行设置_GLIBCXX_DEBUG?

我正在以下无用程序中的 gcc 中设置调试模式:

#define _GLIBCXX_DEBUG 1
#include <vector>
#include <iostream>
using namespace std;
int main() {
    vector<int> v{1,2,3};
    for(int i=0; i<100000000000000;i++)
    cout<<v[i];
}
Run Code Online (Sandbox Code Playgroud)

该程序让我知道我的索引超出范围。但是,如果我翻转前两行的顺序,则不会收到此类错误消息(#include 在 #define 之前)。为什么是这样?有没有办法在程序的另一行上切换调试模式(没有编译器标志)?我这么问是因为我正在 Leetcode.com 上解决问题,我无法传递编译器标志或修改问题的第一行。

c++ gcc g++

2
推荐指数
1
解决办法
4909
查看次数

我应该包含&lt;tuple&gt;吗?

我是C ++的新手,我怀疑,这个问题当然不仅与有关tuple

因此,我看了一个大致包含以下代码的教程:

#include <tuple>

std::tuple<...> t(...)
Run Code Online (Sandbox Code Playgroud)

为什么#include <tuple>呢 特别是考虑到我们明确编写的事实std::tuple。没有那#include行代码就可以很好地编译...

c++ header

2
推荐指数
2
解决办法
133
查看次数

结构可以是"卡*"类型吗?(书中的例子)

我的书说

typedef Card* Cardptr;
Run Code Online (Sandbox Code Playgroud)

"将新类型名称定义为类型Cardptr的同义词Card*." 我看到*符号仅修改Cardptr,如果还有其他同义词,则不会被*符号修改.这对我来说很困惑.我的书让它看起来像实际的结构类型Card*,这让我觉得其他同义词的类型Card*也是如此

typedef Card* Cardptr, n;
Run Code Online (Sandbox Code Playgroud)

哪里n也会有这种类型Card*.如果他们移动这样的*符号,会不会更清楚?

typedef Card *Cardptr, n;
Run Code Online (Sandbox Code Playgroud)

这样一来,你就知道该类型实际上是Card,这Cardptr仅仅是一个指向它,这n是不是一个指针.这是什么原因?

c++ syntax pointers typedef

1
推荐指数
1
解决办法
77
查看次数

我应该使用哪个头文件而不是#include <bits/stdc ++.h>

#include <iostream>
#include <string>
#include <sstream>
//#include <bits/stdc++.h>
#include <iomanip>      // std::setprecision
#include <math.h> 
using namespace std;
Run Code Online (Sandbox Code Playgroud)

我想删除标题#include <bits/stdc++.h>,因为它显着减慢了我的编译时间.

当我删除它时,我收到以下错误:

error: cannot convert ‘long double*’ to ‘double*’ for argument ‘2’ to ‘double modf(double, double*)’
       fractpart = modf(val, &intpart);
Run Code Online (Sandbox Code Playgroud)

我认为问题是缺少头文件,但不知道它是哪一个.

我得到错误的代码是:

fractpart = modf(val, &intpart);
if (fractpart != 0) {
    throw Error("ERR");
}
Run Code Online (Sandbox Code Playgroud)

c++ type-conversion include header-files

1
推荐指数
1
解决办法
1683
查看次数

std :: map似乎找到了不存在的元素

所以,我试图创建一个简单的程序来计算国防部第n个Fibonacci数10^9+7使用倍增公式F[0]=0F[1]=1.程序似乎可以在我的计算机上使用编译器VS2010和CodeBlocks与MinGW一起工作但是在ideone上测试我的程序会为每个输入返回0.似乎在第一次迭代之后,F.find(n)实际上找到了不应该存在的元素.这是我的代码(在VS2010中,我刚刚更改了包含).

#include <bits/stdc++.h>

using namespace std;
std::map<unsigned long long,unsigned long long> F;
unsigned long long fib(unsigned long long n)
{
    if(n==-1) return 0; // Shifting index by 1
    if(n==0) return 1;
    if(n==1) return 1;
    if(F.find(n) != F.end()) return F[n]; // This seems to be the problem,
    else
    {
        if(n%2==0) //
        {
            F[n/2-1] = fib(n/2-1)%1000000007;
            F[n/2] = fib(n/2)%1000000007;
            return F[n] = (F[n/2-1]*F[n/2-1]+F[n/2]*F[n/2])%1000000007;
        }
        else
        {
            F[n/2] = fib(n/2)%1000000007;
            F[n/2+1] = fib(n/2+1)%1000000007;
            return F[n] …
Run Code Online (Sandbox Code Playgroud)

c++ fibonacci

1
推荐指数
1
解决办法
80
查看次数

如何从cpp中的std :: list中删除每一个元素?

我正在尝试从std :: list中删除每个第二个元素,但是当我运行erase()时,我遇到了段错误(核心转储).

#include <bits/stdc++.h>

using namespace std;

int main()
{
    list <int> num_list;
    list <int> :: iterator it;
    num_list.push_back(1);
    num_list.push_back(2);
    num_list.push_back(3);
    num_list.push_back(4);
    num_list.push_back(5);
    cout << num_list.size() << endl;
    it = num_list.begin();
    advance(it, 1);
    for(it; it != num_list.end(); advance(it, 2)) {
        num_list.erase(it);
    }
    for(it = num_list.begin(); it != num_list.end(); ++it) {
        cout << *it << " ";
    } 
    cout << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

1
推荐指数
2
解决办法
241
查看次数

find() stl 在 C++ 中的向量中

今天我试图在没有二进制搜索代码的情况下在向量中找到一个元素的位置,我发现有 find() stl 这样的东西我实现了它并且它正在编译但它没有给出正确的输出

这是我的代码:

#include <bits/stdc++.h>
using namespace std;

int main() {

    int n;
    vector<int> a(0);

    a.push_back(6);
    a.push_back(3);
    a.push_back(9);
    a.push_back(5);
    a.push_back(1);

    vector<int> :: iterator b;
    b = find(a.begin() , a.end() , 3);

    cout << (a.end() - b); // output is 4

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能获得向量中任何元素的位置?谢谢

c++ stl vector find

1
推荐指数
1
解决办法
63
查看次数

在此版本中,标记“&amp;&amp;”不是有效的语句分隔符,C++ 错误

我在 Visual Studio Code 中运行 C++ 代码时遇到错误,我无法在编辑器中运行任何代码,这里是我多次搜索此问题但没有得到任何结果的错误图像。我尝试使用“|” 代替 '&&' 但仍然没有任何改进。我的 VS Code 是最新的。有人愿意分享一些解决这个问题的方法吗?似乎“#include <bits/stdc++.h>”文件中有错误,因为它说第 1 行和 char 46、char 51 等有错误...

这是错误的图像

任何有关此的信息将不胜感激,感谢您的宝贵时间...

powershell visual-studio-code

1
推荐指数
1
解决办法
5151
查看次数