我正在学习智能指针,以下示例test.cpp
#include<iostream>
#include<vector>
#include<memory>
struct abstractShape
{
virtual void Print() const=0;
};
struct Square: public abstractShape
{
void Print() const override{
std::cout<<"Square\n";
}
};
int main(){
std::vector<std::unique_ptr<abstractShape>> shapes;
shapes.push_back(new Square);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码有编译错误“c++ -std=c++11 test.cpp”:
smart_pointers_2.cpp:19:12: error: no matching member function for call to 'push_back'
shapes.push_back(new Square);
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解释一下这个错误吗?顺便说一句,当我更改push_back为时emplace_back,编译器仅给出警告。
我在python中编写了一个函数来计算高斯展宽中的Delta函数,它涉及4级循环.但是,效率非常低,比以类似方式使用Fortran慢约10倍.
def Delta_Gaussf(Nw, N_bd, N_kp, hw, eigv):
Delta_Gauss = np.zeros((Nw,N_kp,N_bd,N_bd),dtype=float)
for w1 in range(Nw):
for k1 in range(N_kp):
for i1 in range(N_bd):
for j1 in range(N_bd):
if ( j1 >= i1 ):
Delta_Gauss[w1][k1][i1][j1] = np.exp(pow((eigv[k1][j1]-eigv[k1][i1]-hw[w1])/width,2))
return Delta_Gauss
Run Code Online (Sandbox Code Playgroud)
我删除了一些常量,使它看起来更简单.
任何人都可以帮我优化这个脚本以提高效率吗?