标签: stdvector

访问数组比访问向量更快吗?

可能重复:
使用数组或std ::向量C++,有什么性能上的差距?
std :: vector比普通数组慢得多?

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循环的时间,相比于载体的用于访问所需的时间是非常小

为什么会这样?因为我认为两者都需要不变且几乎相同的时间..

c++ arrays stdvector

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

c ++用于循环的最佳方式

我有这个问题在我的脑海里运行...我有一个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++ iteration for-loop stdvector

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

用C++协调系统

嗨,我想用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)

请指教.谢谢 !!

c++ arrays vector stdvector c++11

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

复制矢量矢量在复制构造函数中

我最初想的一件简单的事情似乎比我想象的要难.我想在复制构造函数中复制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(),但我不知道这是工作了.

有人可以告诉我一个正确的复制方法吗?感谢您的帮助!

c++ copy copy-constructor stdvector

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

如何在C ++中初始化列表向量?

我想初始化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'创建一个指向成员的指针...

c++ memory-management list stdvector

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

阅读和编写类的向量

我有一个三层/四层的继承层次结构.并且在每个级别内将至少包含一个或多个具有不同属性的类,这些类使该类的对象成为唯一的(当然,从上面的级别继承属性).

类的每个对象可能具有不同的属性,因此我的问题是,如何将每个对象读写到文件中并区分属性?

如果我没有措辞,我会道歉,但如果你能提供帮助,我将非常感激.

c++ inheritance fstream stdvector

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

为模板类创建构造函数,该模板类在向量中调用模板初始化

如果我想创建一个能够调用模板构造函数的模板类(在类构造函数中),这是否可以这样做?或者有更好的解决方案吗?

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,...)扩展它,而不需要为每种情况都有构造函数吗?

c++ templates stdvector c++11

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

std :: vector中的clear()是否会产生内存泄漏?

我的问题几乎是这个问题的延伸:std :: vector内存是否清除了?

在这里,人们解释说,调用clear()后,不会释放为std :: vector元素分配的内存.但是这个内存对于操作系统来说是免费的,以允许其他程序使用它,还是可以让我的程序在其他任何地方使用它?

如果没有(如果内存继续只分配给这个向量,我不能再访问它)是不是像指针那样的内存泄漏?然后清楚()单独使用时这样会完全不安全吗?

如果有人能在这一点上澄清我,我会很高兴.谢谢.

c++ memory-leaks clear stdvector c++11

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

如果我将一个向量声明为全局变量,那么向量分配在哪里?

大家.

我知道vector是动态分配的,所以它在堆上.但我也知道全局变量既不分配在堆上也不分配堆栈.那么矢量位于哪里呢?

global-variables stdvector c++11

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

vector运算符[]和at()之间有什么区别

我正在乱搞一个指针向量的指针

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)

c++ types pointers stdvector dereference

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