Передача & ldquo; vector < string > & rdquo; в качестве аргумента функции, и я получаю ошибку

Я хотел бы предложить этот код, который я сделал, чтобы определить, есть ли изменение значения, i - новое значение, а d - старый (хотя порядок не имеет значения). В этом случае изменение от значения до нуля или наоборот - это изменение, но от нуля до нуля не является (конечно, от значения до другого значения является изменение, но от значения к тому же оно не является).

CREATE FUNCTION [dbo].[ufn_equal_with_nulls]
(
    @i sql_variant,
    @d sql_variant
)
RETURNS bit
AS
BEGIN
    DECLARE @in bit = 0, @dn bit = 0
    if @i is null set @in = 1
    if @d is null set @dn = 1

    if @in <> @dn
        return 0

    if @in = 1 and @dn = 1
        return 1

    if @in = 0 and @dn = 0 and @i = @d
        return 1

    return 0

END

Чтобы использовать эту функцию, вы можете

declare @tmp table (a int, b int)
insert into @tmp values
(1,1),
(1,2),
(1,null),
(null,1),
(null,null)

---- in select ----
select *, [dbo].[ufn_equal_with_nulls](a,b) as [=] from @tmp

---- where equal ----
select *,'equal' as [Predicate] from @tmp where  [dbo].[ufn_equal_with_nulls](a,b) = 1

---- where not equal ----
select *,'not equal' as [Predicate] from @tmp where  [dbo].[ufn_equal_with_nulls](a,b) = 0

. Результаты:

---- in select ----
a   b   =
1   1   1
1   2   0
1   NULL    0
NULL    1   0
NULL    NULL    1

---- where equal ----
1   1   equal
NULL    NULL    equal

---- where not equal ----
1   2   not equal
1   NULL    not equal
NULL    1   not equal

Использование sql_variant делает его совместимым для различных типов

2
задан Bathsheba 4 March 2019 в 14:18
поделиться

1 ответ

ofstream не имеет перегруженного оператора << для std::vector, поэтому вам нужно выполнить его самостоятельно, например

for (auto&& s : username){
    save << s;
}

, хотя ваши причины для использования std::vector могут быть сомнительным.

0
ответ дан Bathsheba 4 March 2019 в 14:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: