如何初始化std :: vector? [英] how to initialize 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.
JDYou *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屋!