首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STL向量: resize()和assign()

STL向量: resize()和assign()
EN

Stack Overflow用户
提问于 2013-10-30 11:29:53
回答 3查看 22.4K关注 0票数 22

有一个类成员std::vector<double> vint n,在这个未初始化的vector上使用以下内容有什么区别:

代码语言:javascript
复制
v.assign(n, 0.0);

代码语言:javascript
复制
v.resize(n, 0.0);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-30 11:37:36

我猜没有初始化,你的意思是它是默认初始化的,也就是一个空向量,然后

代码语言:javascript
复制
v.assign(n, 0.0);

代码语言:javascript
复制
v.resize(n, 0.0);

两者都将向量的大小更改为n,并将所有元素更改为0.0。请注意,对于非空向量,它们通常不同,resize()仅将新元素设置为0.0

票数 20
EN

Stack Overflow用户

发布于 2013-10-30 11:36:28

assign将size设置为n,将所有元素值设置为0.0,而resize将size设置为n,仅将新元素值设置为0.0。

如果v事先是空的,那么它们是相同的,但是assign可能更清楚。

票数 24
EN

Stack Overflow用户

发布于 2013-10-30 12:19:43

赋值意味着用新的属性(大小和元素)替换向量。调整大小意味着保留旧数据并使用新元素扩展新向量,这是在新大小大于旧大小的情况下,否则缩小大小并消除多余的。

运行以下代码两次。一个是赋值,第二个是调整大小(只需取消对第一个的注释)。

代码语言:javascript
复制
#include <iostream>
#include <vector>


int main ()
{
  std::vector<int> vec1;

  vec1.assign(7,100);     
  // vec1.resize(7, 100);
  std::cout << "Size: " << vec1.size() << std::endl;
  for (unsigned int i(0); i < vec1.size(); ++i)
  {
    std::cout << vec1[i] << std::endl;
  }

  vec1.resize(4,5); 
  // vec1.assign(4,5); 
  std::cout << "\nSize: " << vec1.size() << std::endl;
  for (unsigned int i(0); i < vec1.size(); ++i)
  {
    std::cout << vec1[i] << std::endl;
  }

  vec1.resize(10,5); 
  // vec1.assign(10,5); 
  std::cout << "\nSize: " << vec1.size() << std::endl;

  for (unsigned int i(0); i < vec1.size(); ++i)
  {
    std::cout << vec1[i] << std::endl;
  }
 
  std::cin.get();
  return 0;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19673311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档