我认为在迭代器中使用begin会弄乱它,因为它只迭代26次并跳过每2个元素.我怎么能这样做?
void clearVector() {
for (int i = 0; i < 52; i++) {
vector.erase(vector.begin() + i);
}
}
Run Code Online (Sandbox Code Playgroud) std::vector::size返回一个size_t所以我猜它最多可以容纳2 ^ 32个元素.
有没有一个标准集装箱超过可容纳多少更多的元素,例如2 ^ 64 OR的方式来调整std::vector通过例如将"索引" unsigned long long?
我遇到了设计挑战.有一个巨大的std::vector<int>称为O大小10000的说,有类型的两个许多对象Foo,f_1... f_n.每个Foo都有一个内部std::vector<int>的子目录O.例如:
O = 1, 2, ..., 100000
f_1.order = 1, 2, 3
f_2.order = 1, 4, 16
f_3.order = 100, 101, 102
// ...
Run Code Online (Sandbox Code Playgroud)
主要要求是更新其值更改O时的相应f_n值.所有Foo物体的长度和含量在施工时都知道,并且在其使用寿命期间不应该改变.例如,已知它f_1包含第一,第二和第三元素O.
显而易见的解决方案当然是使用指针.Foo可以保存std::vector<int*>每个元素指向原始order(O)的基础数据.
另一方面,我的程序使用Foo对象进行一些繁重的计算.所以我正在寻找一种方法来消除指针解除引用的开销.如果设计允许我使用某种类型std::vector<int&>但这是不可能的(我猜因为vector<T>需要存在T*).
一位同事建议使用boost::ptr_vector.另一位建议持有指数vector<size_t>......
我有三点
P0=[x0,y0,z0]
P1=[x1,y1,z1]
P2=[x2,y2,z2]
Run Code Online (Sandbox Code Playgroud)
我想计算它们的正常值.我做的是:
normal = cross(P0-P1, P0-P2);
Run Code Online (Sandbox Code Playgroud)
然后我想绘制正常,所以我做的是,
c = normal + P0 %end position of normal vector
quiver3(P0(1), P0(2), P0(3), c(1), c(2), c(3));
Run Code Online (Sandbox Code Playgroud)
但它没有用(看起来线和平面之间有一个角度.所以这不正常).
有什么建议吗?
我无法弄清楚如何将新对象存储到向量中,并能够将该信息拉出来.
我想要做的是,在一系列对象中存储文件中的不同数据,然后浏览这些对象并提取信息.
我正在寻找这样的东西:
vector<myClass> list;
while( i < nFiles)
{
myClass *temp = new myClass;
list.push_back(temp);
temp->setSomething();
i++;
}
Run Code Online (Sandbox Code Playgroud)
我希望每个nFile循环都有一个不同的对象,所以我以后可以遍历每个对象并从每个对象中提取信息.
我试过把温度推到一个矢量但它给我的只是错误.
我正在尝试以编程方式正确吗?我无法理解这一点.任何形式的帮助将不胜感激.谢谢.
这是一个noob问题,对不起,我刚开始在c ++中使用向量.这是我正在努力的代码.
int main()
{
//some code
int n;
cin>>n;
vector <int> a(n+1,0);
int first=find(&a,d); //d has some value from the upper portion of the code
}
int find(vector <int>* a,int o)
{
int b=o;
while(a->b!=0)
b=a->b;
return b;
}
Run Code Online (Sandbox Code Playgroud)
Q1:为什么传递像find(a,d)这样的向量不像在数组中那样工作.
Q2:在find函数中,为什么我必须用"."访问向量元素.或" - >".不应该[b]工作吗?如果这是正确的方法那么为什么[b]在主函数中起作用?
问题3:代码有什么问题?当我编译时,我得到了错误
In function ‘int find(std::vector<int>*, int)’:
error: ‘class std::vector<int>’ has no member named ‘b’
Run Code Online (Sandbox Code Playgroud)
我理解错误,但是如何访问所需的元素?
提前致谢.:)
背景:我已经完成了一个游戏作为家庭作业.我们不得不做一个十六进制游戏.我决定使用2d节点矢量实现电路板,并使用2个矢量来跟踪节点邻居的x和y坐标.我用来确定获胜者的路径寻找算法类似于Dijkstra的算法.
我意识到使用2个向量的缺点是它们必须始终保持同步,但我问速度.我也意识到实现电路板的一种更快的方法是使用1d向量(我在完成程序的过程中实现了一半).
问题:就原始速度而言,路径查找算法运行速度更快,使用2个向量来跟踪(x,y),或者如果我使用对向量实现,算法运行速度会更快吗?
如何定义具有动态数组大小的向量.我从一开始就不知道矢量的大小,我需要一个像V [i]而不是V [10]或V [13]的动态矢量!我需要动态矢量像V [i]我该怎么做?
谢谢
对不起我无法提供代码bc我没有.
我的同事(已经在公司工作了很长时间但似乎不知道他在做什么)声称他必须做一些奇怪的事情来从矢量中删除元素.他将所有元素向下移动(从他想要移除的元素开始)然后他将移除向量中的最后一个元素.听起来不错,但效率很低.标准库的std :: vector :: erase()应该能够处理这个问题.
他这样做是因为他声称在元素0上调用erase会产生随机异常.
我的问题是什么可能导致这个?我很确定这是一个线程安全问题,但还有什么可能导致它吗?
请让我知道......我是C++的新手.
再次,抱歉无法提供代码.
谢谢,Jbu
我正在创建一个带有一些设计模式的小程序,我正在尝试实现一个单例.在这个单例类中,我有一个包含我自己定义的File对象的向量.
现在,在进行实际的push_back时,我遇到了分段错误.我尝试删除单例模式,push_back工作得很好.我在一个论坛上看到问题可能是由于矢量尚未初始化而引起的.他们的方式是否允许我使用我的矢量和我的单例模式而不会导致分段错误?
编辑:
标题:
class FileManager
{
public:
static FileManager* GetManager();
~FileManager();
void InitManager();
void LoadAllTitle();
private:
FileManager();
static FileManager* _fileManager;
std::vector<File> _files;
};
Run Code Online (Sandbox Code Playgroud)
资源:
//C++ Header
#include <iostream>
//C Header
//local header
#include "filemanager.h"
#include "settings.h"
#include "defs.h"
#include "file.h"
#include "utilities.h"
FileManager* FileManager::_fileManager = NULL;
FileManager* FileManager::GetManager()
{
if( _fileManager )
{
_fileManager = new FileManager();
}
return( _fileManager );
}
FileManager::FileManager()
{
}
FileManager::~FileManager()
{
}
void FileManager::InitManager()
{
int numberOfFile = Settings::GetSettings()->NumberOfFile() + 1;
for( unsigned …Run Code Online (Sandbox Code Playgroud)