在一个大的std::vector上的迭代 我有一个元组的C++向量。元组由三个双元组和一个整数组成。向量可能包含数十万个元素。即使使用C++11 for(auto-element:vector){}循环,我也能在不超过100k个元素上进行迭代。在整个“大”

在一个大的std::vector上的迭代 我有一个元组的C++向量。元组由三个双元组和一个整数组成。向量可能包含数十万个元素。即使使用C++11 for(auto-element:vector){}循环,我也能在不超过100k个元素上进行迭代。在整个“大”,c++11,vector,iteration,C++11,Vector,Iteration,在一个大的std::vector上的迭代 我有一个元组的C++向量。元组由三个双元组和一个整数组成。向量可能包含数十万个元素。即使使用C++11 for(auto-element:vector){}循环,我也能在不超过100k个元素上进行迭代。在整个“大”向量(目前为275k个元素)上迭代还有其他解决方案吗? 我的代码: for(自动记录:rD) { //查找索引: indxSc=std::get(record)-1; indxSp=静态(std::get(record)/0.3); 如果(in

在一个大的std::vector上的迭代

我有一个元组的C++向量。元组由三个双元组和一个整数组成。向量可能包含数十万个元素。即使使用C++11 for(auto-element:vector){}循环,我也能在不超过100k个元素上进行迭代。在整个“大”向量(目前为275k个元素)上迭代还有其他解决方案吗? 我的代码:

for(自动记录:rD)
{
//查找索引:
indxSc=std::get(record)-1;
indxSp=静态(std::get(record)/0.3);
如果(indxSp>47)indxSp=46;
indxDir=findSector72(std::get(record));
//垃圾箱中的增量计数
++cntSit[indxSc][indxSp][indxDir];
++cntSpeed[indxSp];
//将风速的倒数加上求和
valSpeed[indxSp]=valSpeed[indxSp]+1./(std::get(record));
}

出于好奇,该向量中的每个元素的大小以及它们来自何处(例如,磁盘上的文件、internet…)?我尝试迭代不超过10万个元素,这到底意味着什么?循环不会无缘无故地终止。另外,使用
for(const auto&record:rD)
而不是每次复制一份。您怎么知道它只迭代大约100k个元素?运行时会发生什么?循环停止了吗?它是否继续循环后的语句?请尽可能详细地说明。限制很奇怪。。你有时间限制吗?对于这种特殊情况,当您知道结构是什么时,为什么要使用元组而不是结构?你可以看看这个:谢谢大家!我从头开始,我可以“复制”完整的矢量并将其打印到文件中。因此,问题出在我的代码中的某个地方,可能是被零除。感谢您提醒我使用“const auto&record:rD”选项通过参考传递。我将一步一步地构建代码,这是最好的实践。再次感谢!我的工作是这样的:出于好奇,向量中的每个元素的大小是多少,它们来自哪里(比如,磁盘上的文件,互联网上的…?)我设法迭代不超过10万个元素,这到底意味着什么?循环不会无缘无故地终止。另外,使用
for(const auto&record:rD)
而不是每次复制一份。您怎么知道它只迭代大约100k个元素?运行时会发生什么?循环停止了吗?它是否继续循环后的语句?请尽可能详细地说明。限制很奇怪。。你有时间限制吗?对于这种特殊情况,当您知道结构是什么时,为什么要使用元组而不是结构?你可以看看这个:谢谢大家!我从头开始,我可以“复制”完整的矢量并将其打印到文件中。因此,问题出在我的代码中的某个地方,可能是被零除。感谢您提醒我使用“const auto&record:rD”选项通过参考传递。我将一步一步地构建代码,这是最好的实践。再次感谢!我的工作是这样的:
    for(auto record : rD)
    {
//      Find indices:
        indxSc  = std::get<2>(record) - 1;
        indxSp  = static_cast<int>( std::get<0>(record)/0.3 );
        if(indxSp > 47 )indxSp = 46;
        indxDir = findSector72( std::get<1>(record) );

//      Increment counts in bins
        ++cntSit[indxSc][indxSp][indxDir];
        ++cntSpeed[indxSp];

//      Add reciprocal of wind speed to sum for <1/u>
        valSpeed[indxSp] = valSpeed[indxSp] + 1./( std::get<0>(record) );
    }