问题标签 [stdvector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
5400 浏览

c++ - 在初始化时预填充 std::vector?

我想创建一个双精度向量的向量,并希望它已经具有 (32,32,16) 个元素,而无需手动将所有这些推回。有没有办法在初始化期间做到这一点?(我不在乎推动什么价值)。

我想要一个 3 维数组,第一个维度有 32 个,第二个维度有 32 个,第三个维度有 16 个元素。

0 投票
2 回答
9748 浏览

c++ - 'std::向量::迭代它;' 不编译

我有这个功能:

并且 g++ 给出了这些错误:

应该是很简单的事情,但是看了十分钟,我也没发现什么不对劲的地方。还有人看吗?

0 投票
3 回答
1173 浏览

c++ - question about std::vector::end()

I recently finished fixing a bug in the following function, and the answer surprised me. I have the following function (written as it was before I found the bug):

This function finds all Item objects in the 'items' vector that has a certain position, removes them from 'items', and puts them in 'vect'. Later, a function named putItemsAt does the opposite, and adds items to 'items'. The first time through, getItemsAt works fine. After putItemsAt is called, though, the for loop in getItemsAt will run off the end of 'items'. 'it' will point at an invalid Item pointer, and getPosition() segfaults. On a hunch, I changed it!=items.end() to it<items.end(), and it worked. Can anyone tell me why? Looking around SO suggests it might involve erase invalidating the iterator, but it still doesn't make sense why it would work the first time through.

I'm also curious because I plan to change 'items' from a vector to a list, since list's erase is more efficient. I know I'd have to use != for a list, as it doesn't have a < operator. Would I run into the same problem using a list?

0 投票
3 回答
611 浏览

c++ - 引用 vector::front 有效,但 vector::begin 无效

我有这段代码:

让我解释一下:

client是一个tr1::shared_ptr指向一个对象的对象,该对象具有一个名为的成员,该成员inventory具有一个可访问的私有vector<itemPtr>成员getMisc()itemPtr是 的类型定义tr1::shared_ptr<Item>,并getName()返回 的私有std::string成员Item

本质上,client->inventory.getMisc()归结为 a std::vector,我试图让迭代器指向它的第一个元素。

问题是第四行段错误。显然,它指向的迭代器或 shared_ptr 都是无效的。我使用第一个 cerr 语句来测试向量本身是否有效,并且它应该打印出来,所以我认为它是。

有什么我做错了吗?或者,你们会怎么做来调试这个?

0 投票
2 回答
10535 浏览

c++ - 无符号字符 std::vector 到无符号字符 []?

一个简单的问题,如何创建一个函数,该函数接受 a并用 aunsigned char std::vector吐出 an 。谢谢!unsigned char[]length

啊,看来我的问题是我对 std::vector 的了解。我一直认为 std::vector 没有以线性方式保持其值。这解决了我的很多问题。谢谢!

0 投票
4 回答
8837 浏览

c++ - 如何调用包含在 std::vector 中的对象的构造函数?

当我创建对象的 std::vector 时,并不总是调用这些对象的构造函数。

这是我得到的输出:

这就是我想要的:

在这个例子中,我是否被迫调整向量的大小,然后“手动”初始化它的元素?
原因可能是向量的元素没有以有序的方式初始化,从第一个到最后一个,所以我无法获得确定性的行为?

我想做的是轻松计算在程序中创建的对象的数量,在不同的容器中,在代码的不同点,并为每个对象提供一个 id。

谢谢!

0 投票
2 回答
7498 浏览

c++ - std::vector 是否使用其值类型的赋值运算符来 push_back 元素?

如果是这样,为什么?为什么不使用值类型的复制构造函数?

我收到以下错误:

在以下代码上运行 g++ main.cpp:

0 投票
7 回答
23811 浏览

c++ - 指向 std::vector 和 std::list 元素的指针

我有std::vector一些类的元素ClassA。此外,我想使用 a 创建一个索引,该索引std::map<key,ClassA*>将一些键值映射到指向向量中包含的元素的指针。

当在向量末尾添加元素(未插入)时,是否可以保证这些指针保持有效(并指向同一个对象)。即,以下代码是否正确:

如果我使用std::list而不是,情况如何std::vector

0 投票
3 回答
2431 浏览

c++ - 为基准测试创建随机向量的最快方法

所以,我只是在玩用 C++ 实现一些排序算法,但我发现目前对它们进行基准测试很烦人,因为不运行算法而是创建输入数据需要很长时间。我目前测试每个输入长度(1000、2000,...)10 次,以获得稍微平均的时间。对于这 10 次中的每一次,我vector通过执行以下操作创建一个正确长度的新随机数:

有一个更好的方法吗?我是否应该费心将 rand() 限制在 10000,或者这只是我的强迫症大脑喜欢整数?(即,当您认为模运算实际上执行到 - 目前 - 10 的每个循环为 10,000 时,该模运算实际上是否会花费大量时间。)或者,我是否真的应该在每次运行时创建一个新向量种类?我一直这样做是因为我觉得创建的向量可能有偏差,所以如果生成了那个向量然后使用了 10 次,那么答案可能会很不准确......

0 投票
4 回答
864 浏览

c++ - 返回带有向量的 std::string

我试图让“CMtoaPlugin::listArnoldNodes()”返回一个字符串的“数组”

但这是我得到的,2 个条目,这是正确的,但条目的内容不是

初始化 Arnold 着色器†¡/

初始化 Arnold 着色器。

我究竟做错了什么