为了使对象不可复制,我们可以显式删除其复制构造函数和复制分配运算符。
我的问题是:什么是做正确的地方-在public
,private
或protected
之类的部分?并且-这种选择有什么区别吗?
在一些Robocopy选项中,例如:
/a+:[RASHCNET]
- 将指定的属性添加到复制的文件中.
/a-:[RASHCNET]
- 从复制的文件中删除指定的属性.
[RASHCNET]
涉及什么属性?
不同面额的硬币一个接一个地放置.您需要逐个挑选硬币(除了第一个和最后一个),直到只剩下2个硬币(第一个和最后一个).每次你选择一枚硬币时,你会将它的左右硬币值相乘.问题是以这样的顺序挑选硬币,使得所有乘法的总和最大.例如:
让硬币放置为1,6,7,4
有两种方法可以选择硬币:
第一种方式:首先选择6,这将导致1*7 = 7然后选择7,这将导致1*4 = 4,因此总数将为7 + 4 = 11
第二种方式:首先选择7,这将导致6*4 = 24然后选择6,这将导致1*4 = 4,因此总计将是24 + 4 = 28
28是最大的,这是我们的答案.
我可以通过递归遍历所有可能的情况并比较它们的输出值来找到正确的答案,但这种解决方案效率非常低,因为它需要指数时间.请让我们知道如何更有效地解决这个问题.
编辑: 递归解决方案
int remove (int a [], int end, int pos) {
int tmp = a[pos];
for (int i = pos + 1; i <= end; i++) {
a[i - 1] = a[i];
} a[end] = 0;
return tmp;
}
int * insert (int a [], int end, int pos, int val) {
for (int …
Run Code Online (Sandbox Code Playgroud) 我试图了解其用途std::async
.我在下面写了模板函数来累积整数数组中的所有条目.
template<typename T, int N, typename = std::enable_if<std::is_integral<T>::value>::type>
T parallel_sum(T(&arr)[N], size_t start = 0, size_t end = N - 1) {
if (end - start < 1000) {
return std::accumulate(std::begin(arr) + start, std::begin(arr) + end + 1, 0);
}
else {
size_t mid = start + (end - start) / 2;
auto res1 = std::async(std::launch::async, parallel_sum<T, N>, arr, start, mid);
auto res2 = parallel_sum(arr, mid + 1, end);
return res2 + res1.get();
}
}
Run Code Online (Sandbox Code Playgroud)
当我在main中调用上面的函数时,我得到以下编译错误(以及更多):
错误C2672:'std :: async':找不到匹配的重载函数 …
#include<string>
#include<type_traits>
template<typename... Args>
class C {
public:
void foo(Args&&... args) {
}
template<typename = std::enable_if_t<(0 < sizeof...(Args))>>
void foo(const Args&... args) {
}
};
int main() {
C<> c;
c.foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码按预期的方式(由我:))工作,并void foo(Args&&... args)
在msvc 2015中在运行时调用,但相同的代码甚至无法在gcc 7.3和clang 6.0.0中编译,并出现错误:
错误:“ std :: enable_if”中没有名为“ type”的类型;'enable_if'不能用于禁用此声明
我想了解上述代码有什么问题,如何解决?