我正在看新操作员的签名.这是:
void* operator new (std::size_t size) throw (std::bad_alloc);
Run Code Online (Sandbox Code Playgroud)
但是当我们使用这个运算符时,我们从不使用强制转换.即
int *arr = new int;
Run Code Online (Sandbox Code Playgroud)
那么,如何C++类型的指针转换void*到int*在这种情况下.因为,即使malloc返回a void*,我们也需要明确使用强制转换.
c++ memory-management new-operator dynamic-memory-allocation operator-keyword
我有一些我在Ubuntu上开发的代码,现在我试图在Windows 7上编译它(MS VS 2010).
vector<float> tmp;
....
tmp = {3.0,4.5,9.4};
Run Code Online (Sandbox Code Playgroud)
这给了我语法错误
error C2143: syntax error : missing ';' before '{'
Run Code Online (Sandbox Code Playgroud)
这是因为Visual Studio不支持此功能吗?或者我应该在属性中启用一些开关.我将"Platform Toolset"属性设置为"v100".
谢谢.
我查看了C++ 0x标准,发现要求make_heap不应超过3*N比较.
即堆积无序集合可以在O(N)中完成
/* @brief Construct a heap over a range using comparison functor.
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
来源没有给我任何线索(g ++ 4.4.3)
while(true)+ __parent == 0不是线索,而是对O(N)行为的猜测
template<typename _RandomAccessIterator, typename _Compare>
void
make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{
const _DistanceType __len = __last - __first;
_DistanceType __parent = (__len - 2) / 2;
while (true)
{
_ValueType __value = _GLIBCXX_MOVE(*(__first + __parent));
std::__adjust_heap(__first, __parent, __len, _GLIBCXX_MOVE(__value),
__comp);
if (__parent == 0)
return;
__parent--;
}
}
Run Code Online (Sandbox Code Playgroud)
__adjust_heap看起来像一个log N方法:
while ( __secondChild < (__len - 1) …Run Code Online (Sandbox Code Playgroud) 在C++中,我想知道对象的实际类型是来自同一个类,不是同一个类还是派生类.这类似于以下C#代码:
Class Base
{
}
Class Child:Base
{
}
Base childObject = new Child();
If (childObject.GetType() == typeof(Child))
{
// do some code
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
给定一个整数数组,找到局部最小值.如果A [i-1]> A [i]和A [i] <A [i + 1],则元素A [i]被定义为局部最小值,其中i = 1 ... n-2.在边界元素的情况下,数量必须小于其相邻数字.
我知道如果只有一个局部最小值,那么我们可以用修改后的二进制搜索来解决.但是如果知道阵列中存在多个局部最小值,它能否及时解决O(log n)?
什么数据结构最适合用于文件组织?B-Tree是最好的还是有另一种数据结构可以更快地访问文件和良好的组织?谢谢
我写了一个简单的程序,在O(n)中排序.它的内存效率很低,但这不是重点.
它使用了背后的原理HashMap进行排序:
public class NLogNBreak {
public static class LinkedListBack {
public LinkedListBack(int val){
first = new Node();
first.val = val;
}
public Node first = null;
public void insert(int i){
Node n = new Node();
n.val = i;
n.next = first;
first = n;
}
}
private static class Node {
public Node next = null;
public int val;
}
//max > in[i] > 0
public static LinkedListBack[] sorted(int[] in, int max){
LinkedListBack[] ar = new LinkedListBack[max …Run Code Online (Sandbox Code Playgroud) 找到图中两点之间的最短路径是一个经典的算法问题,有许多好的答案(Dijkstra算法,Bellman-Ford等)我的问题是,是否有一种有效的算法,给定一个有向加权图,一对节点s和t以及值k,找到s和t之间的第k个最短路径.如果有多条相同长度的路径都与第k个最短路径相关,那么算法返回任何路径都是正确的.
我怀疑这个算法可能是在多项式时间内完成的,尽管我知道最长的路径问题可能会减少,这会使NP难以实现.
有没有人知道这样的算法,或者表明它是NP难的减少?
在此早期的问题中,OP询问了以下问题:
给定一个矩形网格,其中一些正方形是空的,有些正方形被填充,可以放入世界的最大数量的2x1多米诺骨牌是这样的,没有两个多米诺骨牌重叠,没有多米诺骨牌在填充的正方形上面?
(相当漂亮!)这个问题的答案认识到这相当于在特殊构造的图中找到最大的二分匹配.在此图中,每个空方块都有一个节点,该节点通过边链接到每个邻居.然后,每个多米诺骨牌对应于图中的边缘,使得其端点不被任何其他边缘覆盖.因此,不共享顶点(匹配)的任何边缘集合对应于多米诺骨牌的排列,反之亦然.
我的问题是对前一个问题的概括:
给定一个矩形网格,其中一些正方形是空的而一些是填充的,那么可以放入世界的M x N多米诺骨牌(对于给定的M和N)的最大数量是这样的,没有两个多米诺骨牌重叠并且没有多米诺骨牌在顶上一个满满的广场?
我无法看到如何将其转换为匹配问题,如前一种情况所做的那样.但是,我也没有看到为什么这个问题会立即成为NP难的特殊原因,因此可能存在一个多项式时间解决问题的方法.
有没有一种有效的算法来解决这个问题?或者是否有人有减少表明这个问题是NP难?
非常感谢!
algorithm ×6
c++ ×3
big-o ×2
arrays ×1
binary-heap ×1
c++11 ×1
casting ×1
filesystems ×1
graph ×1
logarithm ×1
lower-bound ×1
math ×1
new-operator ×1
performance ×1
puzzle ×1
sorting ×1
stl ×1
tiling ×1
typechecking ×1