【问题标题】:vector<bool> arr Reset Issuevector<bool> arr 重置问题
【发布时间】:2017-06-25 08:46:06
【问题描述】:

例如,

vector<bool> arr(10);
arr[0]=true;

然后,我想重置向量。 所以,

arr.clear();

我希望所有元素为零的向量,因为 False 为零。

printf("%d", arr[0]);

但是,结果数 > 0;

即使清除前的值与清除后的值相同!

发生了什么?

   // Test Code
    vector<bool> arr(101);
    arr[1] = true;
    printf("Before Value : %d\n", arr[1]);
    arr.clear();
    printf("Result : %d\n", arr[1]);

    // Test Code




vector<bool> arr(101);
printf("asdf : %d\n", arr.size());

// Test Code
arr[1] = true;
printf("Before Value and size : %d, %d\n", arr[1], arr.size());
arr.clear();
printf("Result and size : %d, %d\n", arr[1], arr.size());

// Test Code

【问题讨论】:

标签: c++ vector stl boolean


【解决方案1】:

调用clear() 后,向量的大小变为0,因此使用下标运算符arr[0] 访问任何元素会导致未定义行为。如果您尝试使用at() 方法访问第一项,则行为将被明确定义,并且将引发::std::out_of_range 异常。

【讨论】:

  • 也就是说,在clear()之后,不是arr(100)初始化为0,只是arr?
  • clear() 不代表zero initialize,它是一种从容器中删除所有项目的方法。我猜是一个相当具有误导性的方法名称。
  • 哦...我明白了...我很抱歉。我还有一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 2016-08-27
  • 2011-07-08
  • 2016-08-24
  • 2021-09-16
  • 2019-12-10
  • 1970-01-01
相关资源
最近更新 更多