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::coutd\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;