为什么以下代码会遇到错误“ A”,而无法访问“ B”呢?这是我的想法:
每当我们调用函数foo()时,它将执行new B(5),它将首先调用其基本结构A的构造函数。
struct A的构造函数是一个公共方法,因此它的派生struct B应该可以访问它(如果我没有记错的话,应加以保护)。
然后将调用结构B的构造函数以创建具有五个0的向量。
然后删除对象a将调用析构函数B,然后调用析构函数A。
我的逻辑有什么问题吗?您的回答将不胜感激
#include <iostream>
#include <vector>
using namespace std;
struct A
{
A() { cout << "Constructor A called"<< endl;}
virtual ~A() { cout << "Denstructor A called"<< endl;}
};
struct B : private A
{
vector<double> v;
B(int n) : v(n) { cout << "Constructor B called"<< endl;}
~ B() { cout << "Denstructor B called"<< endl;}
};
int main()
{
const A *a = new …Run Code Online (Sandbox Code Playgroud) 如果我向行向量 x 添加一个 newvlaue,它将是
x = [newvlue, x] % use of ,
Run Code Online (Sandbox Code Playgroud)
但如果到列向量 x,它将是
x = [newvlue; x] % use of ;
Run Code Online (Sandbox Code Playgroud)
所以我必须提前知道它是行向量还是列向量才能执行此前端插入。但我可能并不总是知道 x 是用户输入。所以每次我需要事先执行这个行向量或列向量检查。但是,假设我真的不想关心它是行向量还是列向量,我只需要在数组的前面添加一个元素。有没有什么优雅的方式来编写代码?
以下代码是我的简单示例,对于每一步,我都会在评论中解释我在做什么,问题在最后。
import pandas as pd
todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date, periods=3, freq='D')
columns = ['A','B','C']
df1 = pd.DataFrame(index=index, columns=columns)
df1 = df1.fillna(1)
# up to here, i've just create a random df1, which looks like the follow:
# A B C
# 2020-03-24 1 1 1
# 2020-03-25 1 1 1
# 2020-03-26 1 1 1
df2 = df1 # here created a copy of df1 named as df2, it should pass by value based on my knowledge
df1 …Run Code Online (Sandbox Code Playgroud) 我有一个关于多态性的问题。以下示例将导致错误“无法将变量 \xe2\x80\x98obj\xe2\x80\x99 声明为抽象类型 \xe2\x80\x98B\xe2\x80\x99”
\n\n我知道问题在于函数 A::foo() 的纯虚方法,这使得 A 成为一个抽象类。此外,类 B 是类 A 固有的。如果我没有在 B 的主体中实现方法 foo(),是否也必然使 B 成为抽象?并因此导致错误?但这的逻辑是什么?我的基类 A 可能还有很多其他派生类,函数 foo 可能适用于某些派生类,但对于 B 类可能完全没用。当然我可以声明一个空函数 B::foo() ,这绝对是不执行任何操作并使代码运行。但是,对于这种行为有更好的解决方案或解释吗?谢谢!
\n\nstruct A\n{\n A() : x(0) {}\n virtual int foo() const = 0; // if I remove this line, code will run with no problem.\n int x;\n};\n\nstruct B : A {};\n\nint main()\n{\n B obj;\n cout << obj.x << endl;\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n 我给了这个看起来很奇怪的std::generate()函数,它std::vector在a和b之间创建一个随机数。
int myrand(int a, int b)
{
int div = b-a;
return a + (rand() % (b-a));
}
int main()
{
vector<int> v(20);
generate( v.begin(), v.end(), bind(myrand,1, 11) ); //fill with random no. bwt 1 and 10
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道std::generate()函数是如何工作的,必须将谓词传递给第三个参数。谓词可以采用以下形式:
但是我对表达式很困惑bind(myrand,1, 11),为什么我们必须这样写呢?
我知道bind返回的函数可以放在这里作为第三个参数。
但是,myrand功能也不是吗?我尝试将第三个参数替换为myrand(1,11),但它不起作用,为什么会这样呢?
参考上面的屏幕截图,我正在尝试从新加坡证券交易所抓取数据,该数据是从返回 json 的 API 调用动态加载的 Web 内容,示例在这里
我对日期有一些问题,这是由 json 给出的数字。例如,1575491760000应该是2019-12-04 20:36:00GMT。
经过一些反复试验,我想出了使用 R 的解决方案:
as.POSIXct(1575491760000/1000, origin="1970-01-01", tz = 'GMT')
# not sure why need to divide the number by 1000 here but i guess this is the way to make it work
Run Code Online (Sandbox Code Playgroud)
上面的代码确实"2019-12-04 20:36:00 GMT"在 R中返回。
但是,我的问题是在 Excel 中是否有上述转换的解决方案?我尝试了几种不同的方法,但没有一种方法可以处理这么长的数据场景(日期 + 时间格式)。如果有人可以提供具体的解决方案,不胜感激!
当我们在c ++中学习动态分配时,关于delete []的最简单示例是:
int main()
{
size_t n = 5;
int *p = new int[n];
delete[] p;
}
Run Code Online (Sandbox Code Playgroud)
简而言之,delete[]它能够从堆内存中删除先前由分配的类似C的数组new。但是,我收到以下代码的错误。
int main()
{
size_t n = 5;
int *p = new int[n];
p++; //move the pointer to the second element of the array
delete[] p;
}
Run Code Online (Sandbox Code Playgroud)
我在想这是否可以删除相同的堆内存,但是从第二个元素开始。但是,我遇到一些我不明白的错误:
Test Prep(51600,0x1000d1dc0) malloc: *** error for object 0x100537134: pointer being freed was not allocated
Run Code Online (Sandbox Code Playgroud) 这是我的简单代码:
int main()
{
int x = 5;
cout << (x++) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印出的5不是6,即使带括号,我的想法是在打印出来之前先执行x = x + 1吗?谁能告诉我这是怎么回事?谢谢
编辑:我肯定理解++ x家伙,我的问题是关于使用()的更改运算符优先级
c++ ×5
arrays ×1
c++11 ×1
date-format ×1
excel ×1
excel-dates ×1
inheritance ×1
matlab ×1
polymorphism ×1
python ×1
r ×1