标签: stdvector

std ::矢量优化

假设从std :: vector读取大量值的循环是我程序中的瓶颈,有人建议我更改

void f(std::vector<int> v)
{
    ...
    while (...)
    {
        ...
        int x = v[i] + v[j]
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

至

void f(std::vector<int> v)
{
    int* p_v = &v[0];
    ...
    while (...)
    {
        ...
        int x = p_v[i] + p_v[j]
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这会通过绕过[]运算符来实际提高性能吗?

c++ stdvector

3
推荐指数
2
解决办法
2103
查看次数

C++:vector <string>*args = new vector <string>(); 导致SIGABRT

非常自我解释.这是导致'new vector'行上的SIGABRT的方法:

vector<string> * Task::arguments() {
    vector<string> *args = new vector<string>(); // CAUSES SIGABRT
    int count = sizeof(_arguments);
    for (int x = 0; x < count; x++) {
        string argument(_arguments[x]);
        args->push_back(argument);
    }
    return args;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在其他地方我称之为确切的行没有任何问题.以下是Task类中包含的列表:

#include <vector>
#include <unistd.h>
#include <string>
using namespace std;
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

c++ new-operator stdvector sigabrt

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

std :: vector of std :: weak_ptr和std :: find

我目前正在尝试用std :: shared_ptr和std :: weak_ptr替换我的代码的某些部分.在很多部分我都有std ::的std :: weak_ptrs(以前是原始的ptrs),并使用std :: find来查找数组中的某个指针.这不适用于弱指针,因为它们由于各种原因不实现==运算符.我必须坚持使用std :: weak_ptr来避免循环依赖.我有什么选择,我应该回到使用原始指针而不是弱指针?

例

//_window is a shared_ptr that I want to find in a vector of weak_ptrs
WindowWeakPtrArray::iterator it = std::find(m_windows.begin(), m_windows.end(), _window); 
Run Code Online (Sandbox Code Playgroud)

谢谢

c++ stdvector c++11

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

std :: vector <A>错误C2582:'operator ='函数不可用

我使用简单的向量push_back到类型A的对象并得到此错误,这是我的代码:

class A 
{
    public:
    A(int a,int b,int c);
};


#include "A.h"
....
....
....
....
std::vector<A>* vec_objects = new std::vector<A>();

while(....some condition ...) 
{

    A a(1,2,3)
    vec_objects->push_back(a);
}
Run Code Online (Sandbox Code Playgroud)

收到此错误:

c:\program files\microsoft visual studio 9.0\vc\include\xutility(3159) : error C2582: 'operator =' function is unavailable in 'A'
1>        c:\program files\microsoft visual studio 9.0\vc\include\xutility(3187) : see reference to function template instantiation 'void std::_Fill<A*,_Ty>(_FwdIt,_FwdIt,const _Ty &)' being compiled
1>        with
1>        [
1>            _Ty=A,
1>            _FwdIt=A *
1>        ]
1>        c:\program files\microsoft visual studio …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

3
推荐指数
2
解决办法
7934
查看次数

我可以在c ++中使用可变修改的向量吗?

有没有办法做到这一点:

std::vector<char[foo]> bar;
Run Code Online (Sandbox Code Playgroud)

我需要一个连续的数组,char[foo]但我不知道运行时的长度.我需要能够char[foo]动态添加块.

我需要内部数组完全正确的大小,所以如果foo是3:

[[1,2,3] [4,5,6] ...... [x,y,z]]

我可以自己实现,但不想重新发明轮子.

c++ stdvector

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

每次都获得不同的地址

在下面的代码中,每次为第一个元素获取不同的地址std::vector v.为什么会这样?

#include <memory>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v;

    for (int i=0; i<10; ++i)
    {
        int b = i;

        v.push_back(b);

        std::cout << std::addressof(v[0]) << std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

0x603010
0x603030
0x603010
0x603010
0x603050
0x603050
0x603050
0x603050
0x603080
0x603080
Run Code Online (Sandbox Code Playgroud)

c++ g++ stdvector memory-address c++11

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

C++ - 通过指针访问向量元素的安全性

在我的C++项目中,我使用a vector来保存一堆structs,其中包含一些简单游戏的元素(即:tic-tac-toe,coordinates,xvs o等).即:

struct gameMove
{
  int x;
  int y;
  int player;
  int order;
};
Run Code Online (Sandbox Code Playgroud)

每次在单个游戏中,无论何时玩家进行移动(即:放置x或移动o),信息都存储在vector通道中push_back(),以创建"撤消"功能,该功能目前按预期工作.

在我的撤销/重做逻辑的某些部分,我使用的函数遍历vector,找到适当的元素,并直接返回指向该元素的指针.

它是否安全,只要我正确管理vector,访问它,将指向元素的所有指针清空vector,或者存在固有风险?我担心的是,如果扩展我计划做的游戏(即:对我正在进行的国际象棋游戏使用相同的代码),并且vector太大而需要自动重新分配,指针将会变得无效(即:整个列表被移动到一个可以适合所有元素的新的连续块),或者是否有某种类型的智能指针接口vector来完成同样的事情?

谢谢.

c++ vector stdvector type-safety

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

将R :: vector转换为std :: vector

我有一个R :: NumericVector,我想知道是否可以在不使用c ++循环的情况下将其转换为std :: vector.

void someFunction(NumericMatrix mtx){
    NumericVector rVec = mtx.row(0);
    std::vector<int> sVec;
    sVec = rVec; //<-- I wanna do something like this
}
Run Code Online (Sandbox Code Playgroud)

r stdvector rcpp

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

C++循环遍历对象并获取它们的地址

我有以下代码片段:

vector<shape*> triangle_ptrs;
for (auto x : triangles)
    triangle_ptrs.push_back(&x);
Run Code Online (Sandbox Code Playgroud)

triangle是一个派生自shape类的类,它triangles是一个std::vector三角形:

std::vector<triangle> triangles;
Run Code Online (Sandbox Code Playgroud)

我需要保存三角形的地址,但是当我遍历集合时,它们的地址似乎是相同的.我该如何解决这个问题?

c++ pointers stdvector

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

如何遍历结构中的向量?

我正在为学校创建各种数字自动售货机,但遇到了问题。我创建了一个Items自动售货结构。然后,我创建了一个名为的结构Machine,其中包含一个vector<Items>。我想创建一个for循环,该循环遍历vector<Item>并显示项目,但出现以下错误:

C:\Users\Nate\Desktop>g++ structversion.cpp -o structversion.exe -std=c++11
structversion.cpp: In function 'int test(Machine)':
structversion.cpp:29:20: error: 'begin' was not declared in this scope
   for (Item item : machine) {
                    ^
structversion.cpp:29:20: note: suggested alternatives:
In file included from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/string:51:0,
                 from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/bits/locale_classes.h:40,
                 from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/bits/ios_base.h:41,
                 from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/ios:42,
                 from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/ostream:38,
                 from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/iostream:39,
                 from structversion.cpp:1:
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/bits/range_access.h:87:5: note:   'std::begin'
     begin(_Tp (&__arr)[_Nm])
     ^
C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/c++/bits/range_access.h:87:5: note:   'std::begin'
structversion.cpp:29:20: error: 'end' was not declared in this scope
   for (Item item : machine) { …
Run Code Online (Sandbox Code Playgroud)

c++ struct iterator loops stdvector

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