我有一个关于这个foreach的问题:
for(Element e : nullProof(setOfElements)){
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
让我们假设我定义了函数nullProof来返回一个非null的Set(因为我听说你不应该将null传递给一个增强的for循环.这是真的吗?):
private Set<Element> nullProof(Set<Element> s){
return s == null ? Collections.<Element> emptySet() : s;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是...... 在foreach中调用nullProof函数是否安全?具体来说,以下标题相当于:
for(Element e : setOfElements){ //assuming setOfElements != null
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人可以指出一些Java标准,它说这是定义的行为.
此外,有人可以解释这个foreach被称为"幕后"实际发生的事情吗?
假设setOfElements的大小为6.对于通过setOfElements的每次迭代,JVM是否会查找setOfElements 6次,还是创建该组的副本并引用该副本?我试图理解这种行为.谢谢您的帮助!
我最初使用Microsoft/visual c ++编译器编写了一个作业,但我的课程要求我使用G ++在unix上运行和编译
但是,strncpy_s不能使用g ++编译,我的特定程序的任何解决方法?
这是使用它的代码段:
void PhoneNumber::setName(const char name[])
{
strncpy_s(_name, name, MAX_NAME_LENGTH);
}
Run Code Online (Sandbox Code Playgroud) 在编译我在linux上使用gcc编译器时编写的c代码时,我必须关闭优化.我发现我可以编译代码,但我只能在没有指定可执行文件名的情况下编译代码(默认为a.out).
这样可行:
gcc -O0 Problem04b.c
Run Code Online (Sandbox Code Playgroud)
但我的问题是我必须提交此作业,我无法提交名为a.out的可执行文件,因为我的教师需要知道它是哪个问题.我意识到我可能只是跑步
cp a.out Problem04b
Run Code Online (Sandbox Code Playgroud)
然后
rm a.out
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有一种方法可以直接将代码编译成可执行的Problem04b.我试过像这样运行命令:
gcc -O0 Problem04b Problem04b.c
Run Code Online (Sandbox Code Playgroud)
但我没有运气.
谢谢你的帮助.
在您阅读我的帖子之前,请考虑到我是C和C++的新手.我主要是托管代码开发人员.
我有两段相同的代码(或者至少我相信).一个用C语言,一个用C++语言.代码基本上检查数字是否为素数,如果是,则将其存储在容器中.
C++
Main.cpp的
#include <iostream>
#include <vector>
#include <time.h>
static bool isPrime(const int& number) {
if((number & 1) == 0) {
if(number == 2)
return true;
else
return false;
}
for(int i = 3; (i * i) <= number; i++) {
if((number % i) == 0)
return false;
}
return number != 1;
}
int main(int argc, const char * argv[]) {
std::vector<int> vector;
clock_t start = clock();
for(int i = 0; i < 30000000; i++) {
if(isPrime(i))
vector.push_back(i); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为性能关键应用程序编写快速C++代码,但我对编译器和编译器实现的了解有限.我目前正在使用gcc编译器.因此,我想知道在实践中是否存在写入的for循环之间的性能差异
//size is int argument
for( int i = 0; i < size; ++i )
{
//code sequence C
}
Run Code Online (Sandbox Code Playgroud)
和写的for循环
//struct definition
struct s
{
int size;
//[...]
};
//[...]
//obj is reference of type s& (say)
for( int i = 0; i < obj.size; ++i )
{
//code sequence C
}
Run Code Online (Sandbox Code Playgroud)
当然,在哪里,size
并obj.size
采取相同(大!)的int
价值.所以问题是:在实践中,查找obj.size
比查找花费更多时间size
.具有恒定大小变量的代码是否会更快?它是否依赖于代码C
(如果C
足够简单,编译器可能会确定size变量的值是否会发生变化......?!).因此,如果查找obj.size
需要更多时间,那么编写是否可取
//obj is reference of type s& (say)
const int size …
Run Code Online (Sandbox Code Playgroud) 在java中,有命令行选项javac -version
来了解计算机上安装的版本.我很想知道有没有办法知道gcc的版本或任何可以帮助我的命令行选项?
记住我不是在问C99,C11,C++ 11等语言标准.我问的是像gcc 4.9.2等编译器版本.
我有兴趣学习D.然而我有点被DMD所转变,因为它不是完全开源的.这就是我考虑使用LDC的原因,但我不确定它的状态是什么.在debian包中它说:
Version: 1:0.14.0.dfsg-1
LDC already compiles a lot of D code, but should still be considered beta quality. Take a look at the
tickets to get a better impression on what still needs to be implemented.
Run Code Online (Sandbox Code Playgroud)
我知道Debian存储库有时可能有点古老,但1.0.0似乎是最新的LDC版本.
我打算使用C语言编写的库.哪个编译器更适合这个目的?LDC还是DMD?我知道之前已经问过这个问题,但我发现的所有问题都比较陈旧,我想知道当前的状态.
据我了解,在C和C ++中,我们创建在堆栈上大小在编译时已知的数据结构,并使用堆(malloc-free / new-delete)处理大小在编译时未知的数据,是在运行时决定的。为什么,我的g ++编译器允许我执行类似以下代码段的操作。
int main(void)
{
int n ;
cin >> n ; // get the size of array.
int arr[n] ; // create a variable sized array.
.... do other stuff ...
}
Run Code Online (Sandbox Code Playgroud)
具体来说,在数组的情况下:
数组在堆栈上分配了一个连续的内存块,并且在堆栈上上下都有变量,因此必须知道数组的大小,以便堆栈上数组上方的变量,数组本身以及堆栈上数组下方的变量都可以整齐地放入内存。那么如何在堆栈上实现可变大小的数组呢? 为什么甚至有必要?为什么我们不能仅将堆用于可变大小的缓冲区?
编辑:
我从评论中了解到,关于VLA是否为标准,C和C ++有不同的规则,而且尼尔·巴特沃思(Neil Butterworth)的评论指出,同时询问两种语言通常不是一个好主意。谢谢大家,因此我打算从问题中删除C标签,因为我打算主要询问C ++,这从代码片段语法可以明显看出。抱歉造成您的困惑,也感谢您的答复。
在Haskell中,我正在尝试解决一个问题,我需要一个接收整数列表的函数,并返回两个相邻数字的最大乘积.
示例:f [5,6,1,3,9]将返回30,即5和6的乘积
函数类型是这样的:
f :: [Int] -> Int
Run Code Online (Sandbox Code Playgroud)
我想解决这个问题,使用递归来迭代列表,得到2个头元素,其格式如下:(x1:x2:xs)
问题是如果当前产品比上一个产品大,我不知道如何保持产品价值比较.
有任何想法吗?