为什么我的程序在我输入g++ program_name时没有警告就很好地编译,但是当我键入时,gcc program_name我得到了一些未定义的引用错误...
我使用标准库很多,这里是我的包括:
#include<string>
#include<vector>
#include<fstream>
#include<sstream>
#include<iomanip>
#include<iostream>
#include<algorithm>
using namespace std;
Run Code Online (Sandbox Code Playgroud)
我问的原因是我花了这么多时间为codeeval.com挑战开发一个解决方案.它在使用g ++编译时非常有效,但不能用gcc编译.
长话短说,当codeeval尝试运行我的东西时,我得到0(!)的分数,虽然我不知道他们如何测试提交...他们只是说:Your program did not pass all the test cases or there may have been warnings printed out at runtime.
当然,我不知道他们是如何编译的......他们说:
You submissions are executed in a *NIX type environment. Assume softwares/shells etc are in their standard locations. Nothing else.
(因为他们的提交指南中有拼写错误,其他东西可能会出现吗?)
他们还说他们接受C++ 4.3.4的解决方案.我正在运行cywin,4.3.4是我的gcc的版本.
有没有其他人在向codeeval.com提交C++代码时遇到过问题?
我试着不要太沮丧,但在这一点上他们看起来更像是codeevil.com给我...
在我看来,这就是内存在C ++中的工作方式:
如果使用,new则要求编译器的实现从堆中提供一些内存(任何内存)。
如果您使用placement new语法,则您将要求重新分配一个特定的内存位置,该地址您已经知道该地址(假设它也是来自堆),该地址最初也是new在某个时候从操作员分配的。
我的问题是这样的:
无论如何,是否有先验知道程序可以使用哪些内存的位置(即,无需从new操作员已经分配给您的堆中重新分配内存)?
堆中的内存是否连续?如果是这样,您能找出它的起点和终点吗?
ps只是试图尽可能快地接近金属...
我知道如果一个变量是全局的,你总是可以通过在变量名前加上来访问它的值::......但是有没有办法访问隐藏在另一个范围内的局部变量的值?
我想到这样的事情:
void f() {
int x = 1;
{
int x = 2;
//access the value of the variable x (with the 1 in it) inside here
}
}
Run Code Online (Sandbox Code Playgroud)
如果语言不支持这个,那么我对一些hacky解决方案完全没问题.
通过'促进',我的意思是使访问更具限制性,并且通过'降级',我的意思是减少限制.
例如,当class B源自class A使用: protected或: private再A的公共成员得到提升,分别为protected和private.
有些class C人可能会进来并从中衍生出来class B,同时将继承的A类成员降级回原来的访问规范吗?
所以我在功能上知道我想要发生什么,我只是不知道让计算机做到最好的方法...在C++ ...
我想实现一个将10位序列映射到6位序列的C++函数.
没关系这些位现在是什么...有2 ^ 10 = 1024个可能的输入.有2 ^ 6 = 64种不同的输出.可能有很多模式.很明显很多模式.但它很复杂.这是一个已知的映射,只是一个复杂的映射.
输出只是64种可能之一.也许他们都没有被使用.他们可能不会.但假设他们这样做.
现在,我正在考虑一个四重嵌套的switch语句,它只处理1024个案例中的每一个并负责业务内联,为任何指向我传递给该函数的结构的指针分配适当的值.这似乎是天真的,有点慢.不是我已经实现了它,但这就是我想先问你的原因.
对于本系统希望支持的语句,这个基本函数(映射)必须在每个语句节点上运行,通常不止一次.我问你,如何在C++中尽可能高效地将10位映射到6位?
我知道映射是什么,我知道10位的哪些输入与6位的输出一起...我可以完全硬编码...不知何故?多开关是如此丑陋.如何将10位映射到6位?!神经网络?记忆松饼?你会怎么做?
自我注意:所以这就是为什么我不是查找表的粉丝.让我们假设所有输入都是同等可能的(当然它们不是,并且可以更有效地排序,但仍然是)然后它将平均需要数组的512个内存前进来检索输出值......看起来如果你做的话一个(全局的,为什么不是)二进制树10级深,你覆盖1024个输入并且可以平均只检索10步的输出......如果有好的模式可能会更少...给定一个确定性的函数是经常运行,如何最好地从已知输入中检索已知输出?
不是试图开始语法战,而只是一个随机的问题......声明指针的理想方式是什么?
int* pI = 4;
int *pI = 4;
Run Code Online (Sandbox Code Playgroud)
(或者我最喜欢的,我知道它不漂亮,但我喜欢它):
int*pI = 4;
Run Code Online (Sandbox Code Playgroud)
同样的问题代表参考:
int& rI = 4;
int &rI = 4;
Run Code Online (Sandbox Code Playgroud)
要么
int&rI = 4;
Run Code Online (Sandbox Code Playgroud)
也许没有正确的答案.同样,我应该关心是否将常量整数声明为:
const int I = 4;
Run Code Online (Sandbox Code Playgroud)
要么
int const I = 4;
Run Code Online (Sandbox Code Playgroud)
我没关心......
我喜欢通过在最后一个括号后面使用const来声明const函数的方式.
我相信常量函数具有与类似的非const函数不同的函数签名(即,const-nesss是函数签名的一部分,不像大多数来源说它只取决于参数类型和返回类型).
这是正确的吗?我应该关心吗?
c++ ×6
declaration ×1
function ×1
g++ ×1
gcc ×1
inheritance ×1
logic ×1
memory ×1
new-operator ×1
optimization ×1
pointers ×1
reference ×1
scope ×1