memory是1000个元素的向量array []是一个1000个元素的整数数组
for (iteration = 0; iteration < numiterations; iteration++) {
for (j = 1; j < numints; j++) {
memory[j] += memory[j - 1];
//array[j] += array[j - 1];
}
}
Run Code Online (Sandbox Code Playgroud)
如果我跑100次迭代后比较for循环的时间,相比于载体的用于访问所需的时间是非常小
为什么会这样?因为我认为两者都需要不变且几乎相同的时间..
我有这个问题在我的脑海里运行...我有一个std :: vector迭代:这是迭代的最佳方式(更快)?
这是使用迭代器的代码:
// using the iterator
for( std::vector <myClass*>::iterator it = myObject.begin( ); it != myObject.end( ); it++ )
{
(*it)->someFunction( );
}
Run Code Online (Sandbox Code Playgroud)
这是'正常'模式......
// normal loop
for( int i = 0; i < myObject.Size( ); i++ )
{
myObject[i]->someFunction( );
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议!
嗨,我想用c ++制作一个坐标系.我将从用户那里获得一些(x,y)坐标并使用它我需要制作一个坐标系(更多的是地图)样式.我怎样才能做到这一点?它需要如下图所示.我应该使用2D数组或矢量以及如何使循环以不同方式进行标记吗?
(2,0)(4,3)(7,8)需要看起来像
**1************
***************
***************
***************
***1***********
***************
***************
********1******
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所获得的代码,但问题是我无法在其中标记多个坐标.我只是使用2 for循环来做到这一点
for(int i = -6; i < 7; i++)
if (i < 0)
cout<<" "<<i;
else
cout<<" "<<i;
cout<<endl;
for(int i = 0; i < 15; i++)
{
cout<<(char)(i + 49);
for(int j = -6; j < 7; j++)
if(i == y - 1 && j == x)
cout<<" x ";
else
cout<<" . ";
cout<<(char)(i + 49)<<endl;
}
Run Code Online (Sandbox Code Playgroud)
请指教.谢谢 !!
我最初想的一件简单的事情似乎比我想象的要难.我想在复制构造函数中复制int类型的向量向量.
std::vector<std::vector<int> * > * bar;
Run Code Online (Sandbox Code Playgroud)
我试过这个,但它不起作用:
Foo(const Foo& rhs)
: bar(new std::vector<std::vector<int> * >(rhs.vec->size())) {
for (std::size_t i = 0; i < rhs.bar->size(); i++) {
bar->push_back(new std::vector<int>());
for (size_t j = 0; j < (*rhs.bar)[i]->size(); j++) {
bar->back()->push_back((*rhs.bar)[i]->at(j));
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也想过,如果我可以使用的东西swap和back(),但我不知道这是工作了.
有人可以告诉我一个正确的复制方法吗?感谢您的帮助!
我想初始化vector的list<int>。我使用fill函数,但是我的编译器显示错误。请朝这个方向帮助我。
std::vector<std::list<int>> neighbors(NRecords);
std::fill(neighbors.begin,neighbors.end,&std::vector<int>(NNeighbors)); // ERROR
Run Code Online (Sandbox Code Playgroud)
错误:错误2错误C3867:'std :: vector <_Ty> :: begin':函数调用缺少参数列表;使用'&std :: vector <_Ty> :: begin'创建一个指向成员的指针...
我有一个三层/四层的继承层次结构.并且在每个级别内将至少包含一个或多个具有不同属性的类,这些类使该类的对象成为唯一的(当然,从上面的级别继承属性).
类的每个对象可能具有不同的属性,因此我的问题是,如何将每个对象读写到文件中并区分属性?
如果我没有措辞,我会道歉,但如果你能提供帮助,我将非常感激.
如果我想创建一个能够调用模板构造函数的模板类(在类构造函数中),这是否可以这样做?或者有更好的解决方案吗?
template<typename T>
class A{
public:
A(int n): mVector(n) {} //normal constructor
A(int n, auto a): mVector(n, T(a)) {} //constructor with template initialization
private:
std::vector<T> mVector;
};
Run Code Online (Sandbox Code Playgroud)
还有一种方法可以为任意数量的参数T(a,b,c,...)扩展它,而不需要为每种情况都有构造函数吗?
我的问题几乎是这个问题的延伸:std :: vector内存是否清除了?
在这里,人们解释说,调用clear()后,不会释放为std :: vector元素分配的内存.但是这个内存对于操作系统来说是免费的,以允许其他程序使用它,还是可以让我的程序在其他任何地方使用它?
如果没有(如果内存继续只分配给这个向量,我不能再访问它)是不是像指针那样的内存泄漏?然后清楚()单独使用时这样会完全不安全吗?
如果有人能在这一点上澄清我,我会很高兴.谢谢.
大家.
我知道vector是动态分配的,所以它在堆上.但我也知道全局变量既不分配在堆上也不分配堆栈.那么矢量位于哪里呢?
我正在乱搞一个指针向量的指针
std::vector<int*>* MyVector;
Run Code Online (Sandbox Code Playgroud)
我试图使用这两种方法访问:
MyVector->at(i); //This works
MyVector[i] //This says "Expression must be a pointer to a complete object type"
Run Code Online (Sandbox Code Playgroud)
根据我的理解,向量[] operator和at方法之间的区别在于at方法进行了额外的边界检查,所以我的问题是为什么at方法成功访问元素而[] operator不是?
编辑:
整个代码在这里
#include <vector>
#include <iostream>
std::vector<int*>* MyVector;
int main()
{
MyVector = new std::vector<int*>;
MyVector->push_back(new int(5));
for (unsigned int i = 0; i < MyVector->size(); i++)
{
delete MyVector->at(i); //This works
delete MyVector[i]; //This says "Expression must be a pointer to a complete object type
}
system("pause");
}
Run Code Online (Sandbox Code Playgroud)