相当尴尬的是,我写了类似下面的东西(消毒过):
vector_item next()
{
if (this->it == this->myVector.end()){
this->it == this->myVector.begin();
}
return *(this->it++);
}
Run Code Online (Sandbox Code Playgroud)
明显的错误很明显.然而,它确实需要一段时间来追踪.
没有为此生成编译器警告,但是应该有吗?在这里创建了一个未使用的r值(并且不是说,来自为其副作用调用的函数的未使用的返回值),这在我看来是代码存在问题的指示器.
编译g++ -Wall -Wextra
.(GCC 4.8.3)
我知道,-Wunused-result
但这不适用于此.
我刚刚进行了一次讨论,讨论了以下两段 C 代码:
For 循环:
#include <stdio.h>
#define n (196607)
int main() {
long loop;
int count=0;
for (loop=0;loop<n;loop++) {
count++;
}
printf("Result = %d\n",count);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
递归:
#include <stdio.h>
#define n (196607)
long recursive(long loop) {
return (loop>0) ? recursive(loop-1)+1: 0;
}
int main() {
long result;
result = recursive(n);
printf("Result = %d\n",result);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
看到这段代码时,我看到并想到“啊,这不是尾部调用递归”,因为它在调用完成recursive(loop-1)+1
后还有工作要做;recursive
它需要增加返回值。
果然,在没有优化的情况下,递归代码会触发堆栈溢出,正如您所期望的那样。
然而,使用该-O2
标志,不会遇到堆栈溢出,我认为这意味着堆栈被重用,而不是将越来越多的内容推入堆栈 - 这就是 tco。
GCC 显然可以检测到这个简单的情况(+1 返回值)并对其进行优化,但是它能走多远?
当递归调用不是最后执行的操作时,gcc 可以使用 tco 优化的限制是什么?
附录:我已经编写了return function(); …
我在的BASE文件中具有以下内容git merge
:
<<<<<<<<< Temporary merge branch 1
- _modifiedTimeWeak = 4.25.2019::11:41:6;
- _lastID = 3;
- weakCGTime = 4.25.2019::11:42:20;
- strongCGTime = 1.2.1990::0:0:0;
=========
- _modifiedTimeWeak = 5.1.2019::8:52:36;
- _lastID = 3;
- weakCGTime = 5.1.2019::8:52:36;
- strongCGTime = 3.20.2019::17:13:20;
>>>>>>>>> Temporary merge branch 2
Run Code Online (Sandbox Code Playgroud)
我现在已经对该文件进行了无基础的合并,因此没有未解决的问题,但是我想了解可能出了什么问题。
我已经检查了由标识的BASE提交git merge-base
,并且它不包括所介绍的合并冲突,因此可以排除。这也是这是第一次,尽管在此存储库发生之前已经进行了许多合并。
可能值得注意的是,我正在使用git merge merge-tool
。
执行合并时,可能导致BASE文件出现合并冲突的原因是什么,可以采取什么步骤来避免将来发生这种情况?
我想从循环内的向量中删除一些索引.
我目前有以下代码:
static void store_faces(Mat image, vector<Rect> faces, string path, string fileName){
SkinDetector mySkinDetector;
int counter = 0;
for(int i = 0; i < faces.size(); i++){
Mat temp = image(faces.at(i));
double ratio= mySkinDetector.getSkin(temp);
cout << "found face skin ratio.. " << ratio << endl;
string file_name = path+ fileName + "_"+ NumberToString(counter)+".jpg";
imwrite(file_name, temp);
counter+=1;
}
}
Run Code Online (Sandbox Code Playgroud)
我想删除那些有脸的脸ratio < 0.5
.如何从中删除物品vector<Rect> faces
?
我正在练习一些C问题遇到一个递归函数用表达式作为参数调用自身的场景.
Pow(double x, unsigned n){
.....
.....
return Pow(x*x,n/2);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否计算表达式(X*X,如在由值调用)时,参数被传递或执行此一惰性求即,不评价使用时为止.
以下是详细问题
查找调用Pow(5.0,12)的乘法次数?
Pow(double x, unsigned n) {
if(n==0) return 1;
if(n==1) return x;
if(n%2==0) return Pow(x*x,n/2);
else
return Pow(x*x,n/2)*x;
}
Run Code Online (Sandbox Code Playgroud)
选项5,6,8,12
c recursion parameter-passing generic-programming call-by-value
我有以下代码
int a=0,b=5;
int c=a&&++b;
cout<<b;
Run Code Online (Sandbox Code Playgroud)
当我运行此代码段时,输出值为5
.
从我的理解,++
有更大的运算符优先级,所以不应该++b
被评估之前&&
导致的价值b
是6
?
为什么价值b
不会增加?是因为我误解了优先权还是其他一些特征?
我对这个程序的输出感到困惑:
#include<stdio.h>
int main()
{
int i=2;
while(i + 1?--i:14)
printf("\n%d", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上述程序的输出是打印1
而不是打印1
然后0
何时i--
使用而不是--i
它将打印1
然后0
为什么是这样?
1
而不打印0
?1
然后0
呢?