当我需要在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;
我应该用数组替换向量以使我的代码更快,如果是这样,我应该怎么做?
答案 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()函数
从向量中获取数组