C++ 用真值填充向量

C++ 用真值填充向量,c++,c++11,vector,std,stdvector,C++,C++11,Vector,Std,Stdvector,我想将std::vector中的所有值设置为true。我写了两种方法:第一种有效,第二种无效。它告诉我myproj.exe触发了一个断点。你知道有什么问题吗 这一个有效: void first(std::vector&vect,unsigned int n) { for(无符号整数i=0;i

我想将
std::vector中的所有值设置为true
。我写了两种方法:第一种有效,第二种无效。它告诉我myproj.exe触发了一个断点。你知道有什么问题吗

这一个有效:

void first(std::vector&vect,unsigned int n)
{       
for(无符号整数i=0;i
这一条没有:

void secound(std::vector&vect,unsigned int n)
{       
for(无符号整数i=0;i
您可以使用以下重载:

vector(大小\类型计数、常量T和值、常量分配器和alloc=Allocator());
其中第一个参数是std::vector的大小,第二个参数是初始值

完整代码:

#包括
#包括
int main(){
标准:向量v(10,真);
用于(自动i:v){
STD::CUT< P>你可以利用这个。这比重新赋值

更为地道的C++。
#include <algorithm>
#include <vector>
#include <iostream>

int main()
{
    std::vector<bool> v(8);

    std::fill(v.begin(), v.end(), true);
}
#包括
#包括
#包括
int main()
{
std::向量v(8);
std::fill(v.begin(),v.end(),true);
}
在第一种情况下,您调用
push_back
,这会自动增加向量的大小

在第二种情况下,您试图访问向量[i]
,该向量不存在,因为向量的大小为0

在这里填充向量最简单的方法是

vect = std::vector<bool>(n, true);
vect=std::vector(n,true);

第二个函数实现的问题是,如果向量为空,或者元素少于第二个参数的值,则不能使用下标运算符。否则,您的行为未定义

实现之间也存在逻辑上的差异

在第一个函数实现中,新元素被附加到向量的已有元素上。在第二个函数实现中,已有元素被覆盖

但是在任何情况下,这两个函数的实现看起来都不太好。您可以使用std::vector类的一个方法来执行相同的操作

这是一个演示程序

#include <iostream>
#include <iomanip>
#include <vector>

void reset( std::vector<bool> &v, size_t n, bool value = false )
{
    v.assign( n, value );
}

int main() 
{
    std::vector<bool> v;

    reset( v, 5);

    for ( const auto item : v )
    {
        std::cout << std::boolalpha << item << ' ';
    }
    std::cout << '\n';

    reset( v, 5, true );

    for ( const auto item : v )
    {
        std::cout << std::boolalpha << item << ' ';
    }
    std::cout << '\n';

    return 0;
}

谢谢你,但这不是我问题的答案。@cain这是你标题的答案,你的实现较差。哦,好吧,你是对的。对不起,但为什么我的实现较差?@cain,因为根本不需要这个函数。胡桃夹子演示了4种方法,
向量
可以用重复值填充自身在没有任何外部帮助的情况下。请注意,
std::vector
有点奇怪。它的行为不像其他所有的
std::vector
专门化。根据您的用例,您可能会更好地使用其他东西。事实上,
vector
非常奇怪,无法解释它有多奇怪。@user4581301为什么奇怪?我想知道它是什么意思t遵循尽可能优化的策略,同时保持界面?@JoachimLusiardi它的行为方式不同于所有其他容器。这很奇怪。复制
是毫无意义的。不过,将
分配为
重置
。也可以在调用
重置
的地方直接调用
。分配
。@wa但我不同意。这是有意义的。值得注意的是,函数是冗余的。这里使用的相同构造函数,
std::vector(n,true);
,可以在创建参数时应用于参数
vector
。换句话说
std::vector my_vector(n,true);
无需将
my_vector
传递到任一填充函数中。
false false false false false 
true true true true true