C++ 布尔向量未正确初始化

C++ 布尔向量未正确初始化,c++,C++,我已经初始化了bools的向量,但出于某种原因 所有内容都设置为false。为什么我不能设置 bool到true #include <iostream> #include <vector> int main() { std::vector<bool> d_WFlag; int d_numGrids = 4; d_WFlag.resize(d_numGrids); d_WFlag[0] = false; std::cout <<

我已经初始化了
bools
向量
,但出于某种原因 所有内容都设置为
false
。为什么我不能设置
bool
true

#include <iostream>
#include <vector>

int main()
{
  std::vector<bool> d_WFlag;
  int d_numGrids = 4;
  d_WFlag.resize(d_numGrids);

  d_WFlag[0] = false;
  std::cout << std::noboolalpha << d_WFlag[0] << " == " << std::boolalpha << d_WFlag[0] << std::endl;
  for(int i = 1; i < (d_numGrids - 1); ++i)
  {
    d_WFlag.push_back(true);
    std::cout << std::noboolalpha << d_WFlag[i] << " == " << std::boolalpha << d_WFlag[i] << std::endl;
  }
  d_WFlag[d_numGrids - 1] = false;
  std::cout << std::noboolalpha << d_WFlag[d_numGrids - 1] << " == " << std::boolalpha << d_WFlag[d_numGrids - 1] << std::endl;

  return 0;
}
#包括
#包括
int main()
{
std::向量d_WFlag;
int d_numGrids=4;
d_WFlag.resize(d_numGrids);
d_WFlag[0]=假;
std::cout
d\u WFlag.push\u back(true);
向向量添加一个新条目,它不会更改任何旧条目!也就是说,如果向量最初具有
N
元素,
d\u WFlag.push\u back(true);
将使向量具有
N+1
元素

如果要修改索引
i
处的现有元素,请执行以下操作:

d_WFlag[i] = true; //it modifies!
其中
i
必须是有效的索引,否则上述代码将调用未定义的行为

如果怀疑
i
可能是无效索引,则可以使用
at()

i
无效时,它抛出
std::out_of_range
异常

要知道什么时候
[]
优于
at()
,什么时候
at()
优于
[]
,请参见以下内容:


希望这有帮助。

您可以,但是您正在做的是从0循环到<3(2)

d\u WFlag.resize(d\u numGrids)
行中,您创建了一个如下所示的向量:
[0]=false,[1]=false,[2]=false,[3]=false

稍后,您将从
0迭代到<3
。您将使用值
[0,1,2]
进入循环,所有这些值都已初始化为false

在调用()的循环中,该循环将元素附加到向量的末尾。第一个元素将位于d\u WFlag[4]中,此元素永远不会被打印


试着用
d\u WFlag[i]=true;
来设置它。

只有在您阅读了
std::vector::push\u back()
的文档后,它才会在向量的末尾追加一个元素。所以您要做的是“将true作为第五项添加,然后打印第一项;将true作为第六项添加,然后打印第二项…”etv

要更改已存在的元素,请使用
运算符[]

d_WFlag[i] = true;

顺便说一下,
循环的
中的结束条件必须是
i
,否则您不设置最后一项。

您的意思是要执行
d\WFlag.resize(d\u numGrids,true)
?如果你想继续提问,你需要在这里添加更多的信息。这是一个不需要动脑筋的问题,答案是正确的,+1。有什么理由取消投票吗?我想有人在这里乱拉。顺便说一句,+1!@Nawaz谢谢!现在乱拉并不是不受欢迎的,尤其是那些不把精力放在问题上的人,他们会面临我的特别行政区因此,casm—他们可能无法忍受……太糟糕了。+1用于显示使用resize()时发生的情况。
d_WFlag[i] = true;