C ++初始化一个大小来自标准输入

时间:2017-12-27 14:15:21

标签: c++ arrays

当我需要在c ++中存储多个相同类型的值时,我可以使用向量或数组。到目前为止,我主要只使用向量,但我听说数组使用起来更快(读取和写入值)。如果这是真的,我想知道如何制作一个具有我从标准输入读取的大小的数组。我目前使用的是这样的东西:

int N;
cin >> N;
vector<int> myVector(N);

我试过了:

int N;
cin >> N;
array<int, N> myArray;

但这给了我一个错误,因为:
错误:&#39; N&#39;的值在常量表达式中不可用 我也尝试过:

int N;
cin >> N;
int myArray[N];

这将编译,但是当我尝试询问此数组的大小(myArray.size())以使用for循环迭代它时,我得到一个错误:
错误:请求会员&#39;尺寸&#39; in&#39; myArray&#39;,这是非类型的&#39; int [N]&#39;

我应该用数组替换向量以使我的代码更快,如果是这样,我应该怎么做?

2 个答案:

答案 0 :(得分:1)

在编译时应该知道

N。因此,如果要将array用于I / O操作,则应指定允许读取的最大int个数。此外,您应该自己跟踪读取整数的数量。

  

所以我应该用数组替换向量,以使我的代码更快,如果   那我该怎么做呢?

不,因为operator>>会成为你案件的瓶颈。 <{1}}当vector的数量未知时,使用int就可以了。

答案 1 :(得分:0)

数组不是c ++中的对象,因此没有.size()函数。你应该使用另一个变量来保持它的大小。

DECLARE @Deleted table (  
    user_id int
);  

DELETE FROM AdvertInfo
OUTPUT DELETED.user_id
INTO @Deleted 
WHERE advert_begin_date <  DATEADD(day, -7, GETDATE())

update u
set user_advert_number = isnull(user_advert_number,0) + 1
from UserInfo as u
inner join @Deleted d on d.user_id = u.user_id

就是这样。但你应该有充分的理由这样做,因为它使用起来更安全,更容易使用。

使用数组后,您必须将其删除:

int* array = new int[size];

并且记住你总是可以通过使用vector :: data()函数

从向量中获取数组