首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初始化向量的每一个循环

初始化向量的每一个循环
EN

Stack Overflow用户
提问于 2015-09-24 13:04:00
回答 3查看 5.6K关注 0票数 0

当我声明一个向量时,它默认为零。作为仿真的一部分,我希望它初始化一个循环中的每个迭代。正确而有效的方法是什么?

我想谈两件事:

  1. 我希望它被归零到一个已知的值,即nSteps #include #包括使用命名空间std;const int nSteps = 10000;const int nReal = 10;int (){ for (无符号int i=0;i
  2. 长度没有定义(它是用使用push_back的函数指定的) #include #include使用命名空间std;const int nSteps = 10000;const int nReal = 10;int main() { for (无符号int i=0;i
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-24 13:46:05

正如轨道轻盈竞赛在他们的答案中所指出的,如果您不希望将向量重新分配给每个循环,那么您可以将向量移出循环,然后使用std::fill将向量重新归零。

代码语言:javascript
复制
int main()
{
    vector<double> v(nSteps);
    for (unsigned int i = 0 ; i<nRealization; i++)
    {
        std::fill(v.begin(), v.end(), 0); // reset to zero
        for (unsigned int j = 0 ; j<nSteps ;  j++)
        {
            //stuff going on with v
        }
    }
}

在第二个例子中,我建议您在循环之外声明向量,就像在第一个例子中那样,然后您只需要在每次迭代中空出向量,就可以用std::vector::clear来实现了。

代码语言:javascript
复制
int main()
{
    vector<double> v;
    for (unsigned int i = 0 ; i<nRealization; i++)
    {
        v.clear(); // erase all elements
        // refill vector with function that uses push_back
        for (unsigned int j = 0 ; j<nSteps ;  j++)
        {
            //stuff going on with v
        }
    }
}

调用clear()不会改变向量的容量,因此在每次重复使用容量时,这将减少内存分配的数量。现在,有些时候,您可以使用一个容量很大的向量来处理几个元素,但是下一次您需要更大的容量时,它就会出现。

票数 3
EN

Stack Overflow用户

发布于 2015-09-24 13:04:58

文件是你的朋友。无论何时,只要您想做一件事,只需阅读标准库实用程序的列表,直到找到你想要的那个

代码语言:javascript
复制
std::fill(v.begin(), v.end(), 0);

这基本上相当于一个老式的memset,但增加了类型的安全性.

票数 5
EN

Stack Overflow用户

发布于 2015-09-24 13:52:44

我不太明白你的问题,但你可以

代码语言:javascript
复制
 v.clear(); 
 v.resize(nSteps, initialValue);

将向量重新初始化到给定的大小和值。我认为这对你的两种情况都是有效的,而且你不需要push_back

但是正如轻盈说的,文档是你的朋友。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32762112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档