我正在寻找一种快速从C#中删除项目的方法List<T>.文档说明List.Remove()和List.RemoveAt()操作都是O(n)
这严重影响了我的申请.
我写了几个不同的删除方法,并在List<String>500,000个项目上测试它们.测试用例如下所示......
概观
我写了一个方法,它会生成一个字符串列表,其中只包含每个数字的字符串表示形式("1","2","3",...).然后我尝试remove了列表中的每个第5项.以下是用于生成列表的方法:
private List<String> GetList(int size)
{
List<String> myList = new List<String>();
for (int i = 0; i < size; i++)
myList.Add(i.ToString());
return myList;
}
Run Code Online (Sandbox Code Playgroud)
测试1:RemoveAt()
这是我用来测试RemoveAt()方法的测试.
private void RemoveTest1(ref List<String> list)
{
for (int i = 0; i < list.Count; i++)
if (i % 5 == 0)
list.RemoveAt(i);
}
Run Code Online (Sandbox Code Playgroud)
测试2:删除()
这是我用来测试Remove()方法的测试.
private void RemoveTest2(ref List<String> list)
{
List<int> itemsToRemove …Run Code Online (Sandbox Code Playgroud) 有人可以解释这是什么以及它是如何合法的C代码?我在此代码中找到了这一行:http://code.google.com/p/compression-code/downloads/list,这是用于自适应霍夫曼编码的Vitter算法的C实现
ArcChar = ArcBit = 0;
Run Code Online (Sandbox Code Playgroud)
从功能:
void arc_put1 (unsigned bit)
{
ArcChar <<= 1;
if( bit )
ArcChar |= 1;
if( ++ArcBit < 8 )
return;
putc (ArcChar, Out);
ArcChar = ArcBit = 0;
}
Run Code Online (Sandbox Code Playgroud)
ArcChar是一个int而ArcBit是一个unsigned char
假设在测试期间,您希望测试软件如何处理"损坏"文件.
我有两个问题:
1.一般来说,如何定义"损坏"文件?换句话说,什么构成了腐败文件?
举个例子:
假设您需要测试"损坏的".pdf文件.
一个建议是简单地获取.zip文件,更改扩展名,然后测试.但是,我认为你没有测试程序如何处理"损坏的.pdf文件",而是测试它如何处理.zip文件.
另一个建议是打开文件并插入/删除随机字节.这个建议没问题,但有一些问题:
2.一旦定义了损坏的文件,你如何创建一个?
这是我到目前为止所想的:
"损坏的文件"是一个正确符合文件格式规范但包含本身存在缺陷的数据/字节的文件.
我能想到的唯一例子是你是否以某种方式更改了文件的编码.然后,您可以将此方法应用于任意格式的文件.
谢谢阅读.
背景:
我正在尝试实现Shunting-Yard算法的变体,但不是以RPN表示法输出表达式,我希望它能够在推入标记时自动更新,以便结果可以实时显示(就像你按下计算器上的按钮,需要在每个按钮后更新显示器).
这是Shunting-Yard课程......
public class ShuntingYard
{
private Stack<double> _operands;
private Stack<Operation> _operations;
public ShuntingYard()
{
this._operands = new Stack<double>();
this._operations = new Stack<double>();
}
}
Run Code Online (Sandbox Code Playgroud)
这Operation堂课就像......
public abstract class Operation
{
public abstract void Evaluate(Stack<double> operands, Stack<Operation> operations);
}
Run Code Online (Sandbox Code Playgroud)
该Evaluate()函数相应地更新堆栈,并且"当前值"将是_operands.Peek()
以下是我到目前为止的一些"操作":
public class NullaryOperation : Operation { }
例如Pi,e等.
只需按常数_operands
public class UnaryOperation : Operation { }
例如SquareRoot,Sine,Cosine等.弹出
一个数字_operands,评估并推送结果_operands
public class BinaryOperation : Operation { }
例如+, - …
甲前缀代码是一组代码,使得没有代码的另一代码前缀.例如,以下集合是前缀代码:
10
11
000
001
0100
0101
0110
0111
Run Code Online (Sandbox Code Playgroud)
有n = 8会员.我认为这些通常是用某种类型的霍夫曼树创造的.
我的问题是:你能帮助我创建一个能够生成带'n'成员的二进制前缀代码的函数吗?
像这样的东西:
list<int> GenerateBinaryPrefixCodes(int n);
而且,要求是在总位数最小化的意义上它是"最佳的".
我更喜欢用C/C++/C#/类似的答案.这不是真正的功课,但我标记它是因为它听起来像是一个很好的hw问题.
谢谢!
我有一个chars 数组,我需要提取这个数组的子集并将它们存储在std::strings中.我试图基于找到\n角色将数组拆分成行.解决这个问题的最佳方法是什么?
int size = 4096;
char* buffer = new char[size];
// ...Array gets filled
std::string line;
// Find the chars up to the next newline, and store them in "line"
ProcessLine(line);
Run Code Online (Sandbox Code Playgroud)
可能需要这样的界面:
std::string line = GetSubstring(char* src, int begin, int end);
我发现了一个SQL语句:
SELECT * FROM Users x
Run Code Online (Sandbox Code Playgroud)
我的问题是:什么是x?我以前从未见过这个.
谢谢.
我有点担心这段代码可能有内存泄漏.我想知道实际上是否有泄漏,以及解决这个问题的正确方法是什么.
说明:我有一个基类Pet与派生类Cat,Dog和Bird.我正在解析文件中的行,并且根据该行中的某些内容,我需要创建派生类的实例,然后以特定方式再次解析行的一部分.这是一个示例文件:
Dog Spot Brown,Labrador,5
Cat Felix Black,7
Bird Polly Green,Parrot,12,Crackers
Run Code Online (Sandbox Code Playgroud)
还有一些代码:
class Pet
{
protected:
string _type;
string _name;
string _desc;
public:
Pet();
bool ParseLine(std::string line);
string Type() { return _type; }
string Name() { return _name; }
string Desc() { return _desc; }
};
class Dog : public Pet
{
private:
string _color;
string _type;
int _age;
public:
Dog(string type, string name, string desc);
bool ParseDesc(string desc);
};
Run Code Online (Sandbox Code Playgroud)
主要代码:
ifstream …Run Code Online (Sandbox Code Playgroud) algorithm ×2
c# ×2
c++ ×2
arrays ×1
c ×1
collections ×1
huffman-code ×1
inheritance ×1
linq ×1
list ×1
memory-leaks ×1
oop ×1
sql ×1
string ×1
testing ×1
unit-testing ×1