如何解决索引 std::vector<bool> 适用于真值,但不适用于假值
我想用 C++ 运行一个简单的程序,其中有两个向量 - 一个是 std::vector<int>
,另一个是等长的 std::vector<bool>
。索引处布尔向量的值决定是否打印整数向量的值。这是我尝试运行的程序的副本:
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> arr{1,2,3,4,5};
vector<bool> b(true,arr.size());
for(int i=0; i<arr.size(); i++){
if(b[i])
cout<<arr[i]<<endl;
}
return 0;
}
上述程序按预期运行。但是当我将 std::vector 初始化行中的值从 true
更改为 false
时遇到地址边界错误。准确地说,错误是:
fish: Job 1,'./test_vector_bool' terminated by signal SIGSEGV (Address boundary error)
我已经从这些线程中了解到使用 vector<bool>
的一些主要陷阱:
我从这些线程中收集到的是,我们不应该在 cpp 中使用 vector<bool>
的引用。但我需要知道的是,为什么带有 true
的向量工作和带有 false
的初始化失败?
解决方法
行 vector<bool> b(true,arr.size());
将创建一个向量,具有 1
元素,值为 arr.size()
。因此,循环将越界。
重要的是要记住,当我们以这种方式构建容器时,我们会说:“What much of what”。
在这种情况下:“我们需要 arr.size()
元素的值为 true
”:
vector<bool> b(arr.size(),true);
有关更多信息,您可能需要查看向量构造函数上的 documentation,特别是第三个,“填充构造函数”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。