【问题标题】:Which method is better to initialize a vector [closed]哪种方法更好地初始化向量[关闭]
【发布时间】:2021-05-26 11:43:06
【问题描述】:

请告诉我在这种情况下哪种方法更好,我想稍后将 std::find 用于向量。 向量将始终包含一个很小的数据集。 谢谢。

int main()
{   
    // method1
    std::vector<int> v1 = {1,2,3,4,5};
    bool cond;
    if (cond)
    {
        // find something in v1
    }
    else
    {
        v1 = {1,2,3};
        // find something in v1 with new values
    }
    
    // method2
    std::vector<int> v1 = {1,2,3,4,5};
    bool cond;
    if (cond)
    {
        // find something in v1
    }
    else
    {
        std::vector<int> v2 = {1,2,3};
        // find something in v2
    }
    return 0;
}

【问题讨论】:

  • 你初始化向量的方式有什么问题?顺便说一句,我不明白 1 和 2 之间的区别。在 1 中您使用 1 个向量,而在 2 中您使用 2 个向量。需要 1 个还是 2 个向量只有你自己知道。
  • 没有错,我只是想知道哪种方法更可取。
  • 定义“更好”。你在测量什么?
  • 在可读性方面拥有一个新变量是最好的。显然,如果v1 很大,那么您可能负担不起。
  • 您要覆盖矢量吗?如果是,则使用方法1,如果不是方法2,则创建一个新向量。

标签: c++ c++11 c++14


【解决方案1】:

如果输入第二个“else”块,是否需要 v1 中的值?如果没有,您可以简单地重新使用 v1 中的内存容量,而不是在条件块的范围内构造一个新的向量 'v2'(无论如何,您似乎都想丢弃 v1 的内容)

v1 = {1,2,3}

这一行重新使用了 v1 已经分配的内存,并简单地复制了来自 '{1,2,3}' 的值

发件人:https://www.cplusplus.com/reference/vector/vector/operator=/: (您的示例属于案例 3)

在调用之前保存在容器中的任何元素都被分配或销毁。

【讨论】:

    猜你喜欢
    • 2013-03-13
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多