再会!
有没有一种简单的方法来获取环境变量的值PATH,分别为用户“用户”和系统“系统”,使用 Windows 控制台(cmd.exe)而不访问注册表分支?
PowerShell 的代码也可以使用,但前提是它适用于默认预装在 Windows 7 中的v1.0版本。
再会!
有没有一种简单的方法来获取环境变量的值PATH,分别为用户“用户”和系统“系统”,使用 Windows 控制台(cmd.exe)而不访问注册表分支?
PowerShell 的代码也可以使用,但前提是它适用于默认预装在 Windows 7 中的v1.0版本。
据我了解,非确定性算法只是一个抽象概念,在现实中并不存在。因为它不能在确定性(真实)计算机上以多项式时间求解。
定义:“非确定性算法”是一种算法,它指定用于处理相同输入的多个路径,而没有指定将选择哪个选项。
那么问题来了:有副作用的算法可以被认为是非确定性的吗?如果是,那么为什么在那种情况下它不能在真实的 PC 上执行?
这是一个算法的例子:
算法的输入是字符串——“Hello user”。
接下来,提示用户选择 4 个菜单项之一,
而不指定应选择哪个项。
输出是“你好用户,你选择了第 n 个菜单项”
困境:该算法完全符合非确定性算法的描述,同时在确定性计算机上以多项式时间求解。
1) 为处理相同的输入数据指定了多个路径。
2)不可能提前预测会选择哪一个。
3) 任何结果都是正确的,无论在运行时选择的路径如何。
4)算法的结果可能不同,尽管处理的是相同的输入数据。
面对这样一个事实,即维基百科定义的质量还有很多不足之处。是的,有很多文字,但形式化并不完整和准确。从字面上看,符文的其余部分是空的。也就是说,来自同一个维基百科的数百个复制粘贴站点。搜索有关编程和算法的书籍(特别是)也没有返回任何结果。要么根本没有定义,要么断章取义,要么翻译质量和编辑的工作太离谱,难以把握意思。
我决定自己正式确定它们之间的差异。我意识到我一个人无法应付。我已经做了一些事情,也许在你的帮助下,可以填补定义中的空白,用波浪号表示。
如果您可以更好地制定公式,请给出确定性和非确定性算法的定义(stochastic,已经有最完整的定义,同时不是一个大的但可以理解的定义)。
分支算法包括:
- 行为完全取决于输入数据的算法称为确定性|deterministic|。他走的每一步都是预先确定的。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~
因此,处理相同的输入总是会导致相同的结果。
- 无法预测行为(它依赖于什么?)的算法称为非确定性|非确定性|。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_和不同的结果。
有时,问题的解决方案归结为使用随机变量。
- 除输入数据外,其行为由随机(伪随机)数生成器的值确定的算法称为随机| randomized|
除了维基百科之外,真的没有人能够给出这些概念的定义吗?原则上,这些概念是编程的基础?有合适的书吗?总得来说很奇怪,那么多人受过高等教育,教授难道真的不给学生这么基本的定义吗?
随机算法和概率算法有什么区别?
为什么他们的定义是分开的?
它们是同义词吗?
例如一个字符串文字:“Hello, world!” 不能出现在赋值运算符的左边。那怎么可能是左可采表达式呢?
"WTF" = "Hello, world!"; // ошибка компиляции
l值:
- 直接指定对象的表达式,在 const 限定的情况下不可修改。例如变量名、函数参数等。
- 引用类型表达式。在 const 限定的情况下不可修改。特别是调用通过引用返回对象的函数的结果;由引用变量名组成的表达式;到引用类型的转换操作等。
- 内置解引用操作(*)的结果是指定类型的左值;在 const 限定的情况下不可修改。
- 内置前缀运算的结果++、--。
- 函数名称。
- 数组的名称。
- 字符串文字。
r 值:
- 表示临时对象的表达式。特别是,调用函数的结果不是通过引用返回对象;内置操作 +、- 的结果。> *、/等;显式创建临时变量 int() 或 C();转换为非引用类型等
- 内置地址操作 (&) 的结果是指针类型的右值。
- 内置后缀操作 ++、-- 的结果。
- 字符串以外的文字(例如数字文字)。
- 枚举常量。
在每个翻译单元中,函数声明必须先于其调用。如果满足此条件,则定义的放置顺序不再重要。
哪个选项更可取,为什么?(首先声明函数然后定义,反之亦然)
void someFunction(); // declaration
void someFunction() { cout << "hello" << endl; }
int main()
{
someFunction(); // function call
return 0;
}
或者
void someFunction() { cout << "hello" << endl; }
void someFunction(); // declaration
int main()
{
someFunction(); // function call
return 0;
}
如果后面的语句完成其工作break,那么标签后面的语句有什么意义?defaultswitchdefault
我经常看到有break和没有 after的例子default:
switch(number)
{
case 0: cout << "Too small.\n"; break;
case 1: cout << "One.\n"; break;
case 2: cout << "Two.\n"; break;
case 3: cout << "Three.\n"; break;
default: cout << "Too large.\n";
break; // какой смысл в этом break?
}
如您所知,引用无法重新分配,因为它们始终引用同一个对象,因此始终是常量。但是,C++ 语法允许永久链接:
int var = 33;
int const & r1 = var; // ссылка на константу
int & const r2 = var; // постоянная ссылка
r1
在引用常量的情况下,一切都非常明显。如果参数“通过引用”传递给函数,则可以使用const修饰符来防止在编写程序代码时意外更改该值。
r2
但是显式指定引用的持久性有什么意义呢?
我不清楚它可以在实践中应用到哪里。
我注意到在很多地方,字符缓冲区的大小是这样确定的:
const int bufferSize = 255;
char buffer[bufferSize+1];
为什么加一个?因为 char 可以存储 256 个值,为什么不立即这样定义它:
const int bufferSize = 256;
char buffer[bufferSize];
字符数组也一样:
const int MAX = 256;
char array[MAX];
谁能解释一下它们的实际用途是什么?事实是,我了解它们的工作机制,但我不明白它们的用途和用途。
让我们看一个例子:
class Animal
{
public:
Animal():itsAge(1) { cout << "Animal constructor...\n"; }
virtual ~Animal() { cout << "Animal destructor...\n"; }
virtual void Speak() const { cout << "Animal speak!\n"; }
protected:
int itsAge;
};
class Dog : public Animal
{
public:
Dog() { cout << "Dog constructor...\n"; }
virtual ~Dog() { cout << "Dog destructor...\n"; }
void Speak() const { cout << "Woof!\n"; }
void WagTail() { cout << "Wagging Tail...\n"; }
}
int main()
{
Animal *pDog = new Dog;
pDog->Speak();
return 0;
}
结果:
使用虚函数的本质是,当通过指针访问一个方法时,恰好会调用在基类中声明为虚函数而在派生类中被重写的选项。
但首先,使用 Animal 类指针 *pDog,您仍然无法访问WagTail()方法(摇尾巴),因为它未在 Animal 类中定义。其次,使用这种机制,您将不得不支付与创建 v 表相关的某些成本(其中每个元素都占用 RAM 资源)。
另外,我不明白为什么在期望指向基类对象的指针时传递指向派生类对象的指针?
上述两个问题都可以通过在基类和派生类中声明非虚拟方法然后编写以下内容来解决:
Dog *pDog = new Dog;
代替:
Animal *pDog = new Dog;
“利润”在哪里?