我有一个简单的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++ 代码:
#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 ++代码段:
#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
感觉必须是不确定的行为。那是对的吗?如果是这样,则该标准的哪一部分如此规定?
我有一个结构向量,每个结构都有一个数字 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,但其他属性的值不同。现在,我认为结构在排序后没有可预测的顺序。有没有办法保证这种输出?我可以向结构添加另一个属性来指示其原始顺序,并以某种方式在排序算法中使用它吗?
我正在编写一个大富翁游戏.而且我真的很喜欢用于制作漂亮干净输出的排序功能,在这种情况下,按照组对玩家拥有的属性进行排序.
首先,这是我的属性分类器功能
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) 使用一段代码来扫描大字符串(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:需要 … 我正在尝试编写一个程序,该程序从文件中读取字符串列表,并检查第二个文件中缺少哪些字符串并将它们打印到屏幕上。但是,我目前在尝试编译时遇到错误。以下是我在尝试编译以及代码时遇到的错误。感谢您的帮助
这是代码:
#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++ 考试,有人问我在这段代码中,该类的 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) #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。
但这一切是如何运作的?就像在空间分配和对该元素的引用方面一样。
问题:
如何将包含 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++ ×10
c++11 ×2
sorting ×2
algorithm ×1
arrays ×1
constructor ×1
destructor ×1
gcc ×1
lambda ×1
linked-list ×1
long-long ×1
oop ×1
stable-sort ×1
stdmap ×1
vector ×1