我很难理解代码为什么会这样表现.首先,我已经阅读了相关的回答材料,但仍然发现了解释.所以我想知道是否有人可以用简单的方式解释这一点.
好的,所以我从列表中删除元素.
该列表包含奇数和偶数的int元素.这一部分我明白了.这是我最初编写的代码,用于从列表中删除奇数
for(list<int>::iterator i = lNo.begin(); i != lNo.end(); i++)
{
if(*i%2 == 0 )
{
lNo.erase(i);
}
else
{
cout << " " << *i;
}
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,程序根本无法编译,我读了一条消息,说明程序必须关闭.
擦写功能在我编写此代码时起作用:
for(list<int>::iterator i = lNo.begin(); i != lNo.end(); i++)
{
if(*i%2 == 0 )
{
i = lNo.erase(i);
}
else
{
cout << " " << *i;
}
}
Run Code Online (Sandbox Code Playgroud)
我只需要理解为什么程序在我编码i = lNo.erase(i)而不是只用lNo.erase(i)时有效?
一个简单的简洁答案将非常感激.我知道不同的容器有不同的约束,所以我违反了原始代码的约束?
我正在构建一个二叉树来搜索数据.我遇到的所有示例都使用数组作为底层数据存储机制.但是,我的数据存储在矢量中.我可以使用向量作为二叉树的基础数据存储机制吗?
我的代码有问题.我很难过.我有一个数据成员,它是一个指向字符串类型的指针.我使用构造函数作为此指针的defualt initialer,然后当我在main函数中调用一个对象时,初始化指针指向存储字符串的内存地址并打印内容.这应该是应该发生的,但我不能让程序工作.请问有人请告诉我哪里出错了?
#include<iostream>
#include<string>
using namespace std;
class NoName{
public:
NoName(string &sName("Alice In Wonderland") ){};
private:
string *pstring;
};
int main(){
//the constructor will be automatically called here once a object is created
// and the string "Alice in Wonderland" will appear on the screen
return 0;
}
Run Code Online (Sandbox Code Playgroud) 这是我编写的一些简单代码。它只是复制一个对象,并使用重载的运算符显示其数据功能。
//Base
#include<iostream>
#include<istream>
#include<ostream>
using std::ostream;
using std::istream;
using namespace std;
class Sphere{
public:
Sphere(double Rad = 0.00, double Pi = 3.141592);
~Sphere();
Sphere(const Sphere& cSphere)
//overloaded output operator
friend ostream& operator<<(ostream& out, Sphere &fSphere);
//member function prototypes
double Volume();
double SurfaceArea();
double Circumference();
protected:
double dRad;
double dPi;
};
//defining the overloaded ostream operator
ostream& operator<<(ostream& out, Sphere& fSphere){
out << "Volume: " << fSphere.Volume() << '\n'
<< "Surface Area: " << fSphere.SurfaceArea() << '\n'
<< "Circumference: " …Run Code Online (Sandbox Code Playgroud) 我创建了一个抽象类,然后创建了继承此抽象类的子类.
class A{
public:
virtual A* clone() const = 0;
virtual A* create() const = 0;
~virtual A(){};
// etc.
private:
A(){};
};
Run Code Online (Sandbox Code Playgroud)
儿童班
class B: public A{};
class C: public A{};
Run Code Online (Sandbox Code Playgroud)
我现在可以使用类型A的指针填充这些类的向量,并通过多态访问子类.
vector<A*> Pntr;
Run Code Online (Sandbox Code Playgroud)
问题是我希望每个子类都能处理自己的内存释放,有点像RAII.但是,RAII不适用于虚拟析构函数.有没有办法可以做到这一点?
以下是一些代码,用于检查值是否介于某个范围之间
if((i <= n) && ( (i+m) >= n){
//do something.....
};
Run Code Online (Sandbox Code Playgroud)
这基本上是一个布尔AND条件,如果两个操作数都为真,那么条件的结果为真.但是,对于短路评估,C++只测试第一个条件是否为真,如果是,那么它永远不会检查第二个条件是否为真.在适当的数学意义上,这是一个布尔测试?这完全扰乱了我的代码的逻辑,而是我必须这样写:
if( (i <= n){
if((i+m) >= n){
//do something......
}
}
Run Code Online (Sandbox Code Playgroud)
什么是短路评估的意义,以及如何在不使用嵌套if条件的情况下使C++进行适当的布尔测试.