小编Fra*_*era的帖子

C#IEnumerable.toArray()in O(1)

我一直在玩BlockingCollection类,我想知道为什么ToArray()方法是一个O(n)操作.来自Java背景,ArrayList的ToArray()方法在O(1)中运行,因为它只返回它使用的内部数组(elementData).那么为什么在世界上他们遍历所有项目,并在IEnumerable.ToArray方法中创建一个新的数组,当他们可以覆盖它并返回集合使用的内部数组?

c# big-o toarray

1
推荐指数
1
解决办法
740
查看次数

如何从 Azure DevOps YAML 文件打印条件调试语句?

启用调试/诊断时,您会在 Azure Pipeline 日志中看到所有这些条件调试语句。

##[debug]   -NoLogo
##[debug]   -NoProfile
##[debug]   -NonInteractive
##[debug]   -Command
Run Code Online (Sandbox Code Playgroud)

但是如何从 PipeLine YAML 文件、脚本或程序打印这些内容呢?我在 Azure PipeLines日志记录命令文档中看到了通过 powershell 记录警告和错误的示例。

echo "##vso[task.logissue type=error]Something went very wrong."
echo "##vso[task.logissue type=warning;sourcepath=consoleapp/main.cs;linenumber=1;columnnumber=1;code=100;]Found something that could be a problem."
Run Code Online (Sandbox Code Playgroud)

但条件调试详细语句中没有任何内容。

azure-devops

1
推荐指数
1
解决办法
1842
查看次数

C++自我执行标准:size_t

简单的问题,在处理数组或其他大型数据结构时,我通常会在我通常使用整数的地方强迫自己开始使用size_t(或unsigned longs?)会对我有好处吗?

假设你有一个向量指针:

auto myVectorPtr = myVector;
Run Code Online (Sandbox Code Playgroud)

您不知道,此向量的大小大于:

std::numeric_limits<int>::max();
Run Code Online (Sandbox Code Playgroud)

你有一个循环:

for(int i = 0; i < myVectorPtr->size(); ++i)
Run Code Online (Sandbox Code Playgroud)

使用不是更好

for(size_t i = 0; i < myVectorPtr->size(); ++i)
Run Code Online (Sandbox Code Playgroud)

避免遇到溢出?

我想我的问题确实是,在算术和其他常见操作中使用size_t(或unsigned longs?)是否有任何副作用.如果我开始使用size_t(或unsigned longs?)而不是经典int,我还需要注意什么.

c++ int size-t

0
推荐指数
1
解决办法
185
查看次数

为什么不能访问vector :: reserve分配的内存

很简单的问题,但为什么当你打电话时

std::vector<int> vec;
vec.reserve(100);
vec[89] = 99; // vector subscript out of range.-
Run Code Online (Sandbox Code Playgroud)

您不能访问向量的0-99元素?考虑到保留向量的增加容量(分配了那个大小的新数组)并且你应该能够访问这些元素,即使它们是空的或者为空启动,也没有多大意义.

我明白,如果你这样做的方式如下:

std::vector<int> vec(99, 0);
vec[89] = 99;
Run Code Online (Sandbox Code Playgroud)

您将被允许访问元素,因为它们将被初始化为0,但是,除了最初通过构造函数之外,您不能使用这样的默认值多次调整向量.

使用数组,可以做到:

int[] arr = new int[100];
arr[89] = 99;
Run Code Online (Sandbox Code Playgroud)

当然,您必须自己编写调整大小.

arr1 = new int[200]
memcpy (arr1, arr, 100);
arr = arr1;
arr[90] = 100;
Run Code Online (Sandbox Code Playgroud)

std::vector一旦达到一定的容量,有没有办法像对待自己调整大小的数组一样?

c++

-3
推荐指数
1
解决办法
1737
查看次数

标签 统计

c++ ×2

azure-devops ×1

big-o ×1

c# ×1

int ×1

size-t ×1

toarray ×1