为什么编译器会跳过for循环?

时间:2019-10-24 04:58:40

标签: c++ algorithm for-loop sum stdvector

我尝试对df['B_Time']=df['B_Date']+' '+df['B_Time'] df['B_Time']=pd.to_datetime(df['B_Time']) df.loc[df['C_Type']==1.0, 'diff_1']=df.loc[df['C_Type']==1, 'C_Time']-df.loc[df['C_Time']==1, 'B_Time'] df.loc[df['C_Type']==2.0, 'diff_2']=df.loc[df['C_Type']==2, 'C_Time']-df.loc[df['C_Time']==2, 'B_Time'] df.loc[df['C_Type']==3.0, 'diff_3']=df.loc[df['C_Type']==3, 'C_Time']-df.loc[df['C_Time']==3, 'B_Time'] 做一些练习,并且做了一个简单的vector循环来计算向量中元素的总和。该程序的行为不符合我的预期,因此我尝试运行调试器,但令我惊讶的是,编译器完全跳过了for循环,而我还没有给出合理的解释。 / p>

for

我已经进行了一些研究,通常,当无法满足最终条件时(例如:设置//all code is written in cpp #include <vector> #include <iostream> using namespace std; int simplefunction(vector<int>vect) { int size = vect.size(); int sum = 0; for (int count = 0; count == 4; count++) //<<--this for loop is being skipped when I count==4 { sum = sum + vect[count]; } return sum; //<<---the return sum is 0 } int main() { vector<int>myvector(10); for (int i = 0; i == 10; i++) { myvector.push_back(i); } int sum = simplefunction(myvector); cout << "the result of the sum is " << sum; return 0; } 而不是for时,会出现定义不明确的count--循环)

1 个答案:

答案 0 :(得分:4)

您的循环条件总是错误的false

看看那里的循环

for (int i = 0; i == 10; i++) 
//              ^^^^^^^-----> condition : is it `true` when i is 0 (NO!!)

for (int count=0; count==4; count++)
//                ^^^^^^^^^-----> condition : is it `true` when i is 0 (NO!!)

您要先检查i等于104,然后再递增。始终是false。因此,它没有进一步执行。他们应该是

for (int i = 0; i < 10; i++)for (int count=0; count<4; count++)


第二,vector<int> myvector(10);分配整数的向量,并用0进行初始化。意思是,此行之后的循环(即main()中的循环)

for (int i = 0; i == 10; i++) {
    myvector.push_back(i);
}

将在其中再插入10个元素(即i),最后将得到myvector20个元素。您可能打算这样做

std::vector<int> myvector;
myvector.reserve(10) // reserve memory to avoid unwanted reallocations
for (int i = 0; i < 10; i++) 
{
    myvector.push_back(i);
}

或更简单地使用<numeric>标头中的std::iota

#include <numeric> // std::iota

std::vector<int> myvector(10);
std::iota(myvector.begin(), myvector.end(), 0);

请注意,avoid practising with using namespace std;