如何初始化std :: vector? [英] how to initialize std::vector?

查看:632
本文介绍了如何初始化std :: vector?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




有人可以告诉我如何将std :: vector

中的任何整数(或浮点数)设置为零比使用for循环?我们可以将memset()或

ZeroMemory()应用于向量吗?谢谢你的帮助。


JD

解决方案

JDT写道:


有人能告诉我如何将

std :: vector中的任何整数(或浮点数)设置为零而不是使用for循环吗?我们可以将
应用于向量的memset()或ZeroMemory()吗?



No.


vector< floatmyvector;

... //填充myvector with一些东西


vector< float>(myvector.size(),0f).swap(myvector);


V

-

请在通过电子邮件回复时删除资金''A'

我没有回复最热门的回复,请不要''请问


* JDT:


>

有人能告诉我吗如何将std :: vector

中的任何整数(或浮点数)设置为零而不是使用for循环?



请注意,无论如何,在某个级别的

实现中都会有一个循环。


对于V型向量v来说,一种简单但可能不是最有效的方法是


V(v.size())。swap(v);


或者你可以做例如


std :: fill(v.begin(),v.end(),0);


我们可以将memset()或

ZeroMemory()应用于向量吗?



std :: memset可以应用于POD元素类型的向量,但它不是建议使用
,尤其不适用于一个对其用法有疑问的人。


ZeroMemory不是标准的C ++函数。


-

答:因为它弄乱了人们通常阅读文字的顺序。

问:为什么这么糟糕?

A:热门发布。

问:usenet和电子邮件中最烦人的事情是什么?


" JDT" < jd ******* @ yahoo.com写了留言

新闻:ZK ******************* @ newssvr14.news 。神童。 net ...





有人可以告诉我如何在std中设置任何整数(或浮点数) :: vector $

除了使用for循环之外的其他方式为零?我们可以将memset()或

ZeroMemory()应用于向量吗?谢谢你的帮助。


JD



你*可以*使用memset,但个人我不喜欢它。原因是它可以打破课程。


比如说,你有一个简单的POD类的std :: vector,例如:


class MyClass

{

public:

int MyInt;

float MyFloat;

char MyChar;

};


std :: vector< MyClassMyVector;


所以你继续使用memset之类的东西(这可能是关闭的):


memset(& MyVector [0],0,sizeof MyClass * MyVector.count( ));


好​​的,它现在有效。但也许以后你改变MyClass也包括

那些不是POD的东西。


class MyClass

{

public:

int MyInt;

float MyFloat;

char MyChar;

std :: string MyString;

};


memset仍会将变量设置为0,但现在你刚刚破了

MyString的。 MyString有一个构造函数,可以设置各种各样的东西,比如

指针,这些指针不一定是0.


考虑替代方案。


Hi,

Can someone show me how to set any integer (or float) in an std::vector
as zero in a way other than using a for loop? Can we apply memset() or
ZeroMemory() to the vector? Thanks for your help.

JD

解决方案

JDT wrote:

Can someone show me how to set any integer (or float) in an
std::vector as zero in a way other than using a for loop? Can we
apply memset() or ZeroMemory() to the vector?

No.

vector<floatmyvector;
... // fill myvector with something

vector<float>(myvector.size(), 0f).swap(myvector);

V
--
Please remove capital ''A''s when replying by e-mail
I do not respond to top-posted replies, please don''t ask


* JDT:

>
Can someone show me how to set any integer (or float) in an std::vector
as zero in a way other than using a for loop?

Note that any way you do it, there will be a loop, at some level of the
implementation.

An easy but perhaps not the most efficient way for a vector v of type V is

V( v.size() ).swap( v );

Or you can do e.g.

std::fill( v.begin(), v.end(), 0 );

Can we apply memset() or
ZeroMemory() to the vector?

std::memset can be applied to a vector of POD element type, but it''s not
recommended, especially not for one who is in doubt about its usage.

ZeroMemory is not a standard C++ function.

--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?


"JDT" <jd*******@yahoo.comwrote in message
news:ZK*******************@newssvr14.news.prodigy. net...

Hi,

Can someone show me how to set any integer (or float) in an std::vector as
zero in a way other than using a for loop? Can we apply memset() or
ZeroMemory() to the vector? Thanks for your help.

JD

You *could* use memset, but personally I don''t like it. The reason being it
can break classes.

Say, for instance you have a std::vector of a simple POD class such as:

class MyClass
{
public:
int MyInt;
float MyFloat;
char MyChar;
};

std::vector<MyClassMyVector;

So you go ahead and use memset something like (this may be off):

memset( &MyVector[0], 0, sizeof MyClass * MyVector.count() );

Okay, it works for now. But maybe later you change MyClass to also include
something that''s not POD.

class MyClass
{
public:
int MyInt;
float MyFloat;
char MyChar;
std::string MyString;
};

the memset will still set the variables to 0, but now you just broke
MyString. MyString has a constructor that sets all kinds of things such as
pointers that aren''t necessarily 0.

Consider alternatives.


这篇关于如何初始化std :: vector?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆