是否有差异++i
,并i++
在一个for
循环?它只是一个语法的东西吗?
使用类似的东西是否有任何性能差异
for(int i = 0; i < 10; i++) { ... }
Run Code Online (Sandbox Code Playgroud)
和
for(int i = 0; i < 10; ++i) { ... }
Run Code Online (Sandbox Code Playgroud)
或者编译器是否能够以这样的方式进行优化,使它们在功能相同的情况下同样快速?
编辑:这是因为我与同事讨论过这个问题,并不是因为我觉得它在任何实际意义上都是有用的优化.它主要是学术性的.
我正在编写一个javascript代码来查找字符串中第n个字符的出现位置.使用该indexOf()
函数,我们可以获得第一次出现的角色.现在的挑战是获得角色的第n次出现.我能够使用下面给出的代码获得第二次出现等等:
function myFunction() {
var str = "abcdefabcddesadfasddsfsd.";
var n = str.indexOf("d");
document.write("First occurence " +n );
var n1 = str.indexOf("d",parseInt(n+1));
document.write("Second occurence " +n1 );
var n2 = str.indexOf("d",parseInt(n1+1));
document.write("Third occurence " +n2 );
var n3 = str.indexOf("d",parseInt(n2+1));
document.write("Fourth occurence " +n3);
// and so on ...
}
Run Code Online (Sandbox Code Playgroud)
结果如下
First occurence 3
Second occurence 9
Third occurence 10
Fourth occurence 14
Fifth occurence 18
Sixth occurence 19
Run Code Online (Sandbox Code Playgroud)
我想概括脚本,以便我能够找到第n次出现的字符,因为上面的代码要求我们重复脚本n次.让我知道是否有更好的方法或替代方法来做同样的事情.如果我们只是给出事件(在运行时)来获取该字符的索引,那将是很好的.
以下是我的一些问题:
确切重复:在C++中i ++和++ i之间是否存在性能差异?
确切重复:循环中i ++和++ i之间的区别?
什么更有效,i ++或++ i?
我只在Java和C/C++中使用过这个,但我真的要求实现它的所有语言.
在大学里我有一位教授告诉我们++我更有效率,但已经有几年了,我想从Stack Overflow社区获得意见.
我读过,有没有人可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等...)并在浪费超过2小时后尝试理解 "comp.lang.c FAQ"中的序列点时间试图通过gcc编译器解释以下结果.
expression(i=1;j=2) i j k
k = i++ + j++; 2 3 3
k = i++ + ++j; 2 3 4
k = ++i + j++; 2 3 4
k = ++i + ++j; 2 3 5
k = i++ + i++; 3 2
k = i++ + ++i; 3 4
k = ++i + i++; 3 4
k = ++i + ++i; 3 6 …
Run Code Online (Sandbox Code Playgroud) 我正在使用带有标志的gcc版本4.8.0 -Wall -std=gnu99
.
我需要在C中使用malloc为连续的2D数组动态分配内存; 这个事实是不可谈判的.但是,为了便于使用,我仍然希望能够使用方便的x[r][c]
表示法访问该阵列.这是我的勇敢尝试,创建指向连续的2D数组的指针,并通过执行*array[r][c]
以下操作索引数组:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
size_t rows = 3, cols = 5;
printf("sizeof(int) = %li\n\n", sizeof(int));
int (*array)[rows][cols] = malloc(sizeof(int) * rows * cols);
printf("array starts at %p\n", array);
printf("sizeof(array) = %li\n", sizeof(array));
printf("sizeof(array[0][0]) = 0x%lx\n", sizeof(array[0][0]));
puts("");
unsigned short r, c;
for (r = 0; r <= rows - 1; r++) {
for (c = 0; c <= cols - 1; c++) {
printf("array[%i][%i] is at %p\n", …
Run Code Online (Sandbox Code Playgroud) 给定n
整数和数字d
数组,对数组执行左旋转。然后将更新后的数组打印为单行以空格分隔的整数。
输入样例:
5 4
1 2 3 4 5
第一行包含两个以空格分隔的整数,分别表示n
(整数数)和d
(必须执行的左旋转数)的值。第二行包含用n
空格分隔的整数,这些整数描述了数组初始状态的各个元素。
样本输出:
5 1 2 3 4
static void Main(String[] args)
{
string[] arr_temp = Console.ReadLine().Split(' ');
int n = Int32.Parse(arr_temp[0]);
int d = Int32.Parse(arr_temp[1]);
string[] arr = Console.ReadLine().Split(' ');
string[] ans = new string[n];
for (int i = 0; i < n; ++i)
{
ans[(i + n - d) % n] = arr[i];
}
for (int j = 0; j …
Run Code Online (Sandbox Code Playgroud) 以下代码段
int i=0;
printf("%d %d",i++,i++);
Run Code Online (Sandbox Code Playgroud)
给出输出
1 0
我可以理解,但以下
int i=0;
printf("%d %d",++i,++i);
Run Code Online (Sandbox Code Playgroud)
给出输出
2 2
有人能解释我第二种行为吗?
我的代码有错误(问题末尾的代码).我的C++可执行文件的目的是读取包含数字的文件,将其复制到std :: vector中,然后只打印stdout中的内容?问题出在哪儿?(ATOI?)
我有一个简单的文本文件,其中包含以下数字(每行有一个数字)
mini01:algorithms ios$ cat numbers.txt
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
当我执行程序时,我再收到一行:
mini01:algorithms ios$ ./a.out
1
2
3
4
5
0
Run Code Online (Sandbox Code Playgroud)
为什么我在标准输出中获得第6行?
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
using namespace std;
void algorithm(std::vector<int>& v) {
for(int i=0; i < v.size(); i++) {
cout << v[i] << endl;
}
}
int main(int argc, char **argv) {
string line;
std::vector<int> vector1;
ifstream myfile("numbers.txt");
if ( myfile.is_open()) {
while( myfile.good() )
{
getline(myfile, line);
vector1.push_back(atoi(line.c_str()));
}
myfile.close();
}
else …
Run Code Online (Sandbox Code Playgroud) 我正在学习C并在本书中看到了下面列出的第一个循环.我很好奇两者之间的差异,因为我习惯使用第二个,并且无法找出差异,即使它们返回不同的结果.
for(i = 0; i < 10; ++i){}
for(i = 0; i <= 10; i++){}
Run Code Online (Sandbox Code Playgroud) public void push(E element) {
if (size == elements.length) {
resize(); // doubel of size
}
elements[size++] = element;
}
public E pop() {
if (size == 0) {
throw new java.util.EmptyStackException();
}
E element = elements[--size];
elements[size] = null; // set null in last top
return element;
}
Run Code Online (Sandbox Code Playgroud)
java中的++和++ a或a - 和--a之间有什么区别?
谢谢
在一些代码中,我看到了一个带有--i作为第三个参数的for循环
for(int i=array.length; i<0; --i)
Run Code Online (Sandbox Code Playgroud)
也许有人可以解释我与我的区别 - ?
我想这就像我减少的那一刻?
c ×4
c++ ×3
java ×3
c# ×2
operators ×2
performance ×2
algorithm ×1
expression ×1
for-loop ×1
javascript ×1
pointers ×1