小编use*_*301的帖子

3*1000000000作为int溢出,但变量很长.为什么?

我有一个简单的c ++应用程序,执行以下计算

long long calcOne = 3 * 100000000;     // 3e8, essentially
long long calcTwo = 3 * 1000000000;    // 3e9, essentially
long long calcThree = 3 * 10000000000; // 3e10, essentially
Run Code Online (Sandbox Code Playgroud)

如果我写每个计算的结果,我得到以下输出:

calcOne = 300000000
calcTwo = -1294967296
calcThree = 30000000000
Run Code Online (Sandbox Code Playgroud)

那么为什么第二次计算失败呢?据我所知,它在长长型的范围内(calcThree更大......).

我在Windows 10上使用Visual Studio 2015.提前感谢.

c++ long-long

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

在单链表 C++ 中实现复制构造函数

我有一个 C++ 代码:

#include <iostream>
using namespace std;
struct Node;

typedef Node *NodePtr;

struct Node
{
    int Item;
    NodePtr Next;
};

class LinkedList
{
public:
    LinkedList();                   // default constructor
    ~LinkedList();                  // destructor
    void AddTail(int);              // adds item to tail
private:
    NodePtr Head;
};

LinkedList::LinkedList()
{
    Head = NULL; //declare head as null
}
//Adding on tail
void LinkedList::AddTail(int Item)
{
    NodePtr Crnt;
    NodePtr node = new Node;
    node->Item = Item;
    node->Next = NULL;
//if head is in null declare the …
Run Code Online (Sandbox Code Playgroud)

c++ constructor destructor linked-list copy-constructor

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

std :: map擦除-将迭代器传递给错误的地图

请使用以下C ++代码段:

#include <map>

int main() {
    std::map<int, int> m1;
    m1[1] = 2;

    std::map<int, int> m2;
    m2[3] = 4;
    m1.erase(m2.begin());

    return m2.size();
}
Run Code Online (Sandbox Code Playgroud)

在Godbolt上:https://godbolt.org/z/mJBszn

感觉必须是不确定的行为。那是对的吗?如果是这样,则该标准的哪一部分如此规定?

c++ stdmap undefined-behavior language-lawyer

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

排序后如何保持向量中重复项的顺序?

我有一个结构向量,每个结构都有一个数字 ID,我用它来对向量项进行排序。我希望对 ID 进行排序,但在排序后也按照它们在原始向量中的顺序显示。让我解释...

假设你有一个像这样的向量(忽略结构):

vector<int> items = {
    1,
    2,
    5, // First 5
    8,
    9,
    6,
    5, // Second 5
    4,
    7,
    3,
    5, // Third 5
    10
};
Run Code Online (Sandbox Code Playgroud)

排序后我希望向量看起来像这样:

vector<int> items = {
    1,
    2,
    3,
    4,
    5, // First 5
    5, // Second 5
    5, // Third 5
    6,
    7,
    8,
    9,
    10
};
Run Code Online (Sandbox Code Playgroud)

请记住,这些项目实际上是结构。多个可以具有相同的 ID,但其他属性的值不同。现在,我认为结构在排序后没有可预测的顺序。有没有办法保证这种输出?我可以向结构添加另一个属性来指示其原始顺序,并以某种方式在排序算法中使用它吗?

c++ sorting algorithm stable-sort

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

编译器错误C2280,试图引用已删除的函数operator =

我正在编写一个大富翁游戏.而且我真的很喜欢用于制作漂亮干净输出的排序功能,在这种情况下,按照组对玩家拥有的属性进行排序.

首先,这是我的属性分类器功能

bool propertySort(Property a, Property b) { return a.getGroup() <  b.getGroup(); }
Run Code Online (Sandbox Code Playgroud)

现在,玩家拥有这些属性的列表.

#pragma once
#include <string>
#include <vector>
#include "Dice.h"
#include "Property.h"

class Player
{
public:
    ...
private:
    int curMoney{ 1500 };
    int curLocation{ 0 };
    int playerNum{ 0 };
    std::string name;
    std::vector<Property> ownedProperties{};
    int curDiceRoll;
};
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,它是一个底层的私有属性,它被归为0属性.

因此,在我的主要物业分拣机中,我会在棋盘上显示属性以供玩家查看,分拣机功能不断给我一个错误C2280.我知道正是这种排序函数抛出了这个错误,因为如果我注释掉排序行,程序运行正常.我确信这是显而易见的,因为我是初学程序员,所以我一无所知.如果有人能够提供有关什么是伟大的见解,谢谢!

void viewProperties(Player& p)
{
    string prompt = "Select a player to view their properties";
    vector<string> playerNames{};
    for (Player p : players)
    {
        playerNames.push_back(p.getName());
    }
    Menu propertiesMenuSelection{ prompt, playerNames }; …
Run Code Online (Sandbox Code Playgroud)

c++ sorting compiler-errors

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

尝试使用 find_if 函数通过第一个元素来查找成对向量中的值

使用一段代码来扫描大字符串(html),然后解析其中的任何单词。如果尚不存在,则将所有实例推送到向量或对(单词和计数),否则增加计数(对的第二个元素)。

vector < pair <string,int> > vect; 
vector < pair <string,int> >::iterator it;

    ...

it = find_if (vect.begin(), vect.end(), currentword);
if (it != vect.end())
        it->second++;
else 
    vect.push_back( make_pair(currentword, 1));
    ...
Run Code Online (Sandbox Code Playgroud)

出现编译错误:

在 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/stl_algobase.h:71:0 包含的文件中,
                 来自 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/char_traits.h:39,
                 来自 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/ios:40,
                 来自 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/ostream:38,
                 来自 C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/iostream:39,
                 来自 webCounter.cpp:19:
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/predefined_ops.h: 在 'bool __gnu_cxx::__ops::_Iter_pred::operator()(_Iterator) 的实例化中 [与 _Iterator = __gnu_cxx::__normal_iterator, int>*, std::vector, int>>>; _Predicate = std::__cxx11::basic_string]':
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/stl_algo.h:120:14:需要从 '_RandomAccessIterator std::__find_if(_RandomAccessIterator, _RandomAccessIterator, _Predicate, std: :random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator, int>*, std::vector, int> > >; _Predicate = __gnu_cxx::__ops::_Iter_pred >]'
C:/TDM-GCC-32/lib/gcc/mingw32/5.1.0/include/c++/bits/stl_algo.h:161:23:需要 …

c++ gcc vector c++11

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

当我打开一个文件名在 std::string 中的 fstream 时,为什么会出现“没有匹配的函数”错误?

我正在尝试编写一个程序,该程序从文件中读取字符串列表,并检查第二个文件中缺少哪些字符串并将它们打印到屏幕上。但是,我目前在尝试编译时遇到错误。以下是我在尝试编译以及代码时遇到的错误。感谢您的帮助

这是代码:

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

using namespace std;

ifstream IN_FILE;
ofstream OUT_FILE;

int main()  { 
    int k = 0;
    int m = 0;
    int n = 0;
    string a[5000];
    string b[5000];
    string filename;
    bool good;

    //open file and check if valid entry
    cout << "\n\nWhat is the name of the first file (ex: filename.txt)\n" << endl << "FILENAME: ";
    getline(cin, filename);
    IN_FILE.open(filename);
    while(!IN_FILE) {
        cout << "Sorry the file you entered could not be opened\n"; …
Run Code Online (Sandbox Code Playgroud)

c++

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

析构函数中的删除与删除[]

我在学习 C++ 考试,有人问我在这段代码中,该类的 d'tor 是否应该使用 delete[] 而不是 delete:

    template <class T>
class ClonePtr
{
private:
    T* ptr;
public:
    explicit ClonePtr(T* p = nullptr) : ptr(p) {}
    ~ClonePtr() { if(ptr!=nullptr) delete []ptr; }
    ClonePtr(const ClonePtr& other) : ptr(nullptr)
    {
        *this = other;
    }
    ClonePtr(ClonePtr&& other) : ptr(other.ptr)
    {
        other.ptr = nullptr;
    }
    ClonePtr& operator=(const ClonePtr& other)
    {
        if (this != &other)
        {
            delete ptr;
            if (other.ptr != nullptr)
                ptr = other.ptr->clone();
        }
        return *this;
    }
    T& operator*() const { return *ptr; …
Run Code Online (Sandbox Code Playgroud)

c++ oop

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

使用字符作为数组中的索引

#include<iostream>
using namespace std;
int main()
{
    int arr[128];
    arr['a'] = 101;
    cout<<arr['a'];

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

所以我进行了实验,发现字符可以用作数组中的索引,而不是传统的整数。该程序给出了正确的输出,即正确的 101。

但这一切是如何运作的?就像在空间分配和对该元素的引用方面一样。

问题:

  1. 声明了 128 个 int 块,总共 512 个字节。程序如何将“101”存储在字符块中,即在字符占位符“a”中?空间分配是什么样的?
  2. 当我将数组的索引数减少到 128 以下时,为什么这个程序不起作用?
  3. 由于这不是地图而是数组,程序如何通过“a”引用“101”?

c++ arrays

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

C++。使用自定义 lambda 将二进制数组累加为整数

如何将包含 0 和 1 的二进制数组累加为整数?

vector<int> arr = {1,0,1,0,1,1,1,0,1,0,0};

int num = accumulate(
    arr.begin(), arr.end(), 
    [](int &a, int &b)
    { 
        // ???  
    }
);
Run Code Online (Sandbox Code Playgroud)

在每一步我都需要这样的东西:

if(arr[i] % 2) num += pow(2, i);
Run Code Online (Sandbox Code Playgroud)

但是如何在 lambda 中实现这一点呢?如何进入ilambda?

c++ lambda c++11

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