我正在写一个"文件共享托管",我想在上传到一个唯一的名称时重命名所有文件,并以某种方式跟踪数据库上的名称.由于我不想要两个或多个具有相同名称的文件(这肯定是不可能的),我正在寻找一种基于密钥或其他东西为我生成随机名称的算法.
此外,我不想生成名称并搜索数据库以查看该文件是否已存在.我想确保我的应用程序之前从未创建过生成的文件名的100%或99%.
知道怎么写这样的应用程序吗?
我有一个这样的程序
list<int>:: iterator n = alist.begin();
while(n!= (list<int>::iterator)0)
{
printf("Element is %d\n",*n);
n = alist.erase(n);
}
Run Code Online (Sandbox Code Playgroud)
所以我在这里将迭代器与零进行比较.但删除最后一个元素后,编译器显示此错误.
*** glibc detected *** ./new: free(): invalid pointer: 0xbf99cb10 *** ======= Backtrace: ========= /lib/libc.so.6[0xb7d956e1] /lib/libc.so.6(cfree+0x89)[0xb7d96d79] /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0xb7f3ff81] ./new[0x8048c81] ./new[0x8048ca6] ./new[0x8048d07] ./new[0x8048d39] ./new(__gxx_personality_v0+0x216)[0x804888e] /lib/libc.so.6(__libc_start_main+0xdc)[0xb7d46f9c] ./new(__gxx_personality_v0+0x49)[0x80486c1] ======= Memory map: ======== 08048000-0804a000 r-xp 00000000 08:09 3704751 /home/sathya/chaithra/archivesthrash/new
如果队列/列表为空,我希望迭代器为零..我该怎么办?因为在我的项目中我需要将此迭代器与零进行比较,而不是与alist.end()进行比较.这可能是什么解决方案?
我经常遇到手动实现的排序和/或搜索算法,而不是使用语言实现的算法.我一直在研究的大多数源代码都是用Java,C#或PHP编写的 - 但我猜这种现象与语言无关.
关于列表等常规数据结构; 为什么以及在哪里实现自己的算法?思想原因?内存效率更高?不能忍受使用内置功能的想法?Java最好使用mergesort(在Collections.sort()中),当你将它与quicksort作为例子进行比较时会有一些开销.如果您有定期使用的常用任务,我们非常欢迎您用您选择的语言提交!
在 VC++ 6.0 (MFC) 中,如何将控件(例如:Button、EditBox 和 Static Text)从窗体底部移动到窗体顶部。
说我有一个类定义:
class CustomClass {
int member;
};
Run Code Online (Sandbox Code Playgroud)
为什么以下变量定义正在编译并正常工作:
CustomClass CustomClass; // the variable is properly constructed
Run Code Online (Sandbox Code Playgroud)
这不应该混淆编译器并导致它指示错误吗?
Unicode有一组用于标点符号的字符,例如省略号(...),En-Dash( - )等.人们认为使用这些字符可以改善字体排版,从而改善文本的视觉外观.
许多开发工具,包括Visual Studio,支持Unicode,因此我可以轻松地在程序资源中使用这些字符 - 对话框等.
有没有理由不这样做?
这是给你的一个难题.
我想更改以下比较方法,以便当两个项目被认为相等时,它们将随机洗牌.
myList.Sort( (x, y) => x.Score.CompareTo(y.Score) );
Run Code Online (Sandbox Code Playgroud)
我可以想象这个场景在订购搜索结果时很有用,如果你不想在他们的分数相同的情况下优先考虑一个结果而不是另一个结果.
有人想试一试吗?
这是我第一次尝试解决方案,但它不起作用.我会告诉你原因.
class RandomizeWhenEqualComparer<T> : IComparer<T>
{
private readonly Func<T, T, int> _comparer;
public int Compare(T x, T y)
{
if (x.Equals(y)) return 0;
int result = _comparer(x, y);
if (result != 0) return result;
double random = StaticRandom.NextDouble();
return (random < .5) ? -1 : 1;
}
public RandomizeWhenEqualComparer(Func<T, T, int> comparer)
{
_comparer = comparer;
}
}
Run Code Online (Sandbox Code Playgroud) 我在Windows XP SP2平台上使用VC++ 6.0.我在我的代码中使用GUID结构.
typedef struct _GUID { // size is 16
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
Run Code Online (Sandbox Code Playgroud)
如何在创建对象时将此结构初始化为零?或者当我创建一个对象时,成员的默认值是多少?
在对这个答案的评论中提出了一个想法,即反转简单链接列表只能在O(nlog(n))中完成,而不是在O(n)时间内完成.
这绝对是错误的 - O(n)反转不是问题 - 只需遍历列表并随时更改指针.需要三个临时指针 - 这是不变的额外内存.
我完全理解O(nlog(n))比O(n)更差(更慢).
但出于好奇 - 可能是一个用于反转简单链表的O(nlog(n))算法?具有恒定额外存储器的算法是优选的.
我们有一个模板转换函数,用于与numeric数据类型一起使用.它里面包含一个构造,它不能用像指针这样的类型进行编译.
template<class To, class From>
To ConvertTo( From what )
{
assert( 2 * what == what * 2 ); // this will not compile for pointers
//skipped
}
Run Code Online (Sandbox Code Playgroud)
当枚举作为第二个模板参数传递时,此函数可以编译并正常工作:
enum TSomeEnum {
SE_First,
SE_Second
};
TSomeEnum enumValue = SE_First;
int result = ConvertTo<int>( enumValue );
Run Code Online (Sandbox Code Playgroud)
上面的代码在VC++ 7上按预期编译和运行.
操作*如何用于枚举?这是未定义行为的一种方式吗?