为什么这不起作用?
#include <vector>
struct A {
template <typename T> void f(const std::vector<T> &) {}
};
int main() {
A a;
a.f({ 1, 2, 3 });
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个特征类来帮助我的程序。我有一个名为的模板类operations,其中包含方法display和area。当我定义这些函数时,我收到错误。他们来了:
错误:专门化成员
‘traits::operations<Rectangle>::display’需要‘template<>’语法
错误:专门化成员‘traits::operations<Rectangle>::area’需要‘template<>’语法
template <>正如您所看到的,编译器希望我在这些定义之前插入。但当我这样做时,我会得到一大页错误。出了什么问题以及如何修复它?
这是我的程序。
namespace traits
{
template <typename P>
struct operations
{
static void display(Rectangle const &, std::ostream &);
static void area(Rectangle const &);
};
template <typename P, int N>
struct access {};
}
namespace traits
{
template <int N>
struct access<Rectangle, N>
{
static double get(Rectangle const &);
};
}
// The errors occur here
namespace traits
{
static void operations<Rectangle>::display(Rectangle …Run Code Online (Sandbox Code Playgroud) 当我输入正确的值(整数)时,它是好的.但是当我输入一个角色时,我会得到一个无限循环.我查看了这段代码的每一面,但是找不到它的问题.为什么会这样?我在Windows上使用g ++ 4.7.
#include <iostream>
#include <limits>
int main()
{
int n;
while (!(std::cin >> n))
{
std::cout << "Please try again.\n";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.clear();
}
}
Run Code Online (Sandbox Code Playgroud)
输入:x
输出:

如果std::list是一个链表,那么为什么你可以拥有多少元素?每个元素都是指向新节点的链接,并且您可以拥有多少指针没有限制.
这是一个简单的计数器.默认情况下add,调用该方法将私有变量递增count1.我Counter从函数中返回类,以便它可以被链接,但是当我查看输出时,它给出了1,当我期望它为3时,因为我调用add了三次.
#include <iostream>
#include <vector>
using std::cout;
class Counter {
public:
Counter() : count(0) {}
Counter add() {
++count; return *this;
}
int getCount() {
return count;
}
private:
int count;
};
int main() {
Counter counter;
counter.add().add().add();
cout << counter.getCount();
}
Run Code Online (Sandbox Code Playgroud) 当我有:
std::ostringstream oss("Hello");
Run Code Online (Sandbox Code Playgroud)
为什么这样做:
std::cout << oss.str();
Run Code Online (Sandbox Code Playgroud)
但这不会打印任何内容:
std::cout << oss.rdbuf();
Run Code Online (Sandbox Code Playgroud)
阅读定义operator<<(std::ostream&, std::streambuf*)说它将从缓冲区打印字符。难道oss.rdbuf()没有包含什么吗?
如果我有一个lambda,它通过reference([&] {})捕获所有自动变量,为什么不能将它转换为函数指针?常规函数可以修改变量,就像lambda一样,可以通过引用捕获所有内容,为什么它不一样?
我想换句话说,lambda与&捕获列表和常规函数之间的功能差异是什么,使得lambda不能转换为函数指针?
这打印0,意思data是零初始化.为什么即使base有用户声明的构造函数也会发生这种情况?
struct base
{
base() { }
int data;
};
struct derived : base
{
derived() = default;
};
int main()
{
std::cout << derived().data;
}
Run Code Online (Sandbox Code Playgroud)
如果derived有一个用户声明的构造函数,那么它会输出一个随机值.为什么零初始化取决于派生类而不是基类?
这段代码是否格式良好?函数模板本身的声明在clang和gcc中都会出错,即使它很Ts可能是空的.
// error: too many template arguments for class template 'pair'
template<class I, class U, class... Ts>
void f(std::pair<I,U,Ts...>);
int main()
{
f(std::pair<int,int>());
}
Run Code Online (Sandbox Code Playgroud)
函数调用在gcc中给出了这个错误,这是没有意义的.没有转换为int:
note: cannot convert 'std::pair<int, int>()' (type 'std::pair<int, int>') to type 'int'
Run Code Online (Sandbox Code Playgroud) 我能够使用以下代码绘制数据:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
url = "http://real-chart.finance.yahoo.com/table.csv?s=YHOO&a=03&b=12&c=2006&d=01&e=9&f=2016&g=d&ignore=.csv"
df = pd.read_csv(url)
df.index = df["Date"]
df.sort_index(inplace=True)
df['Adj Close'].plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)
但现在我想计算数据的滚动平均值并绘制出来.这就是我尝试过的:
pd.rolling_mean(df.resample("1D", fill_method="ffill"), window=3, min_periods=1)
plt.plot()
Run Code Online (Sandbox Code Playgroud)
但这给了我错误:
Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex
Run Code Online (Sandbox Code Playgroud)
我想要做的就是绘制数据的滚动均值.为什么会这样?