【问题标题】:How to memset on 2d vector如何在 2d 矢量上进行 memset
【发布时间】:2018-09-29 17:11:02
【问题描述】:

所以我在这里有一个 2D 矢量,我想分配一个值 num,我想看看哪个执行更好的填充与 memset() 作为 C++ 菜鸟,我实际上在设置正确的代码语法时遇到问题,因为我总是得到我这样做时出现分段错误。

vector<vector<int>> matrix(10, vector<int>(10000000));
int main()
{
    int num;
    cin >> num;
    int i = 0;
    for (auto &i : matrix)
    {
        fill(i.begin(), i.end(), num); 
    }
    return 0;
}

【问题讨论】:

  • 在哪些方面表现更好?就不会混淆您的代码memset 的读者而言,这不是很好,因为没有明显的理由使用它;)
  • 向我们展示你的 memset 尝试?
  • 与您的问题没有直接关系,但int i = 0; 声明毫无意义,您可以将其全部删除。
  • 你不能把memset 随意改成ints。
  • memset 作用于字节,如果你将 memset 与 1 一起使用,你将得到值 16843009 的整数,请参阅 this example on ideone

标签: c++ fill memset 2d-vector


【解决方案1】:

You can use memset for std::vector&lt;int&gt;,我认为这不是一个好主意,而且std::vector 相当丑陋。是的,您可以像使用它一样使用std::fill,但在您的情况下有一种更简单的方法,使用std::vector 构造函数。像这样:

int main()
{
    int num;
    std::cin >> num;
    std::vector<std::vector<int>> matrix(10, std::vector<int>(10000000, num));
    return 0;
}

【讨论】:

  • 如果最右边的维度总是固定,则可以将所有这些项目作为ContiguousContainer 概念,如vector&lt;array&lt;int,10000000&gt;&gt; vv{10, array&lt;int,10000000&gt;{num} };
  • 感谢 Hamed 的回复,但我想暂时使用我需要分配一个值(可能彼此不同)的情况,尽管我只使用了我的替代品为所有分配 1 个值。
  • @Zambodia 我不确定我是否理解正确,但如果您需要用不同的数字填写 std::vector,您需要逐步完成,例如使用 push_back 和如果有一个序列你想用它填充你的向量,我认为这是要走的路 -> stackoverflow.com/questions/17694579/…
  • @Hamed,谢谢,我可能会用这个。
猜你喜欢
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2023-01-16
  • 2023-01-12
  • 2017-09-26
相关资源
最近更新 更多