标签: stdvector

C++中两个指针向量的减法和相交

我有两个向量,指向我的自定义类对象.
这两个向量中的指针不指向同一个对象,但存储在对象中的值是相同的.

我的自定义类结构是:


Class Item
{
   string ItemId;
   string ItemDescription;
   float ItemPrice;
}
第一矢量(V1)具有n个条目,第二矢量(V2)具有m个条目(n> m).

我要执行两个操作:

  • 获取一个在V1和V2中都有共同对象的向量.通常,我的意思是说元素的ItemId是相同的.(可以称为V1和V2的交点).

  • 获取具有V2中不存在的元素的向量.(可以称为V1-V2).

    如何以有效的方式做到这一点?

  • c++ stdvector

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

    使用std :: vector of std :: vector成员实现类的移动语义的正确方法

    我有一个类,其成员是向量的向量.我想为这个类编写一个构造函数,它将一个向量的r值引用作为参数,并将其作为vector参数的单个元素向量移动到成员向量中.到目前为止,我有:

    class AClass
    {
        std::vector<std::vector<int>> member;
    
    public:
    
        AClass(std::vector<int> &&vec) : member(1) 
        {
            member[0] = std::vector<int>(std::move(vec));
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这似乎工作正常,但我不确定std::move周围vec是否有必要.或者,如果std::vector我已经为我照顾了很多这个,那我的写法有点不同.

    c++ stdvector move-semantics c++11

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

    无法访问C++向量下的内存

    我在我的程序中使用了一个向量,如下所示:

    vector<vector<string> > values;
    values[0].push_back("test words");
    
    Run Code Online (Sandbox Code Playgroud)

    当我运行代码时,它显示"段错误"

    然后我尝试gdb它,我得到了这个:

    Program received signal EXC_BAD_ACCESS, Could not access memory.
    Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000008
    0x00000001000035be in std::vector<std::string, std::allocator<std::string> >::push_back (this=0x0, __x=@0x7fff5fbff330) at stl_vector.h:602
    602     if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
    
    Run Code Online (Sandbox Code Playgroud)

    这里发生了什么 ?

    c++ gdb g++ stdvector

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

    替换一堆std :: vector条目

    我有一个std :: vector.我指定这个矢量

    vec.assign(20000, 0);
    
    Run Code Online (Sandbox Code Playgroud)

    现在我有一个额外的数组,我想插入到向量中.但不仅仅是插入,更多的替换元素在向量中.

    uint8_t a[] = {1,2,3,4,5,6,7,8};
    
    Run Code Online (Sandbox Code Playgroud)

    将该数组移动到位置x - x + 8上的向量中,而不分配新内存.

    我尝试和工作的当然是

    vec.insert(start, a, a+8);
    
    Run Code Online (Sandbox Code Playgroud)

    但是我在那里分配新的内存并且向量的大小发生变化,这是不应该发生的.是的,我可以删除,条目太多,但仍然有问题,我分配更多的内存.是否有可能只用向量的内容替换数组?像这样的Smth:

    vec.replace(start, a, a+8);
    
    Run Code Online (Sandbox Code Playgroud)

    我想避免更换每个元素,因为我担心这可能需要太长时间.

    你怎么看?有没有办法做到这一点?你以前也遇到过这个问题吗?你怎么修好它的?

    c++ stdvector

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

    为什么这个向量分配不起作用?

    类似问题:


    #include <vector>
    #include <iostream>
    
    using namespace std;
    
    int main() {
      vector<vector<int> > vvi;
      vvi.resize(1);
      vvi[0].reserve(1);
      vvi[0][0] = 1;
    
      vector<int> vi = vvi[0];
    
      cout << vi[0]; // cout << vvi[0][0]; works
    
      return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这给了我一个段错误,我不知道为什么.

    c++ stdvector assignment-operator copy-assignment

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

    在C++中移动向量的值

    假设以下基本向量:

     std::vector<int> numbers;
     numbers.push_back(0);
     numbers.push_back(1);
     numbers.push_back(2);
     numbers.push_back(3);
    
    Run Code Online (Sandbox Code Playgroud)

    在0和1之间插入6个新数字的有效方法是什么?

    这是我现在的方法,但我觉得它效率不高:

     for (int new_number=0;new_number<6;new_number++) {
         numbers.emplace(numbers.begin()+1+new_number,new_number);
     }
    
    Run Code Online (Sandbox Code Playgroud)

    我不喜欢这种方法的原因是数字1-3必须被移动6次.有没有办法将这些数字移动一次而不是6次?然后我可以使用这个循环:

     for (int new_number=0;new_number<6;new_number++) {
         numbers[new_number+1]=new_number;
     }
    
    Run Code Online (Sandbox Code Playgroud)

    这是我想要完成的:

    转移前的矢量:

    0 1 2 3
    
    Run Code Online (Sandbox Code Playgroud)

    转移后的矢量:

    0 X X X X X X 1 2 3
    
    Run Code Online (Sandbox Code Playgroud)

    c++ stdvector

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

    c ++将存储在std :: vector中的数据传递给c_func(void*data)

    我有一个std::vector,我需要从libgcrypt获取其内容的哈希值.

    我如何获得的内容std::vector<int-type> vec到gcry_md_hash_buffer(GCRY_MD_MD5, (void*)&digest, (void*)buffer, vec.size());这里buffer是data在vec?

    c c++ void stdvector

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

    为什么我的指向std :: vector元素的指针在push_back()之后改变了它的值?

    我使用一个简单的代码:

    std::vector < float > arr = { 3.42f, 6.45f, 53.43f };
    float *elemPtr;
    elemPtr = &arr[ 0 ];
    
    std::cout << "elemPtr = " << *elemPtr << std::endl;
    arr.push_back( 7.0f );
    std::cout << "elemPtr = " << *elemPtr << std::endl;
    
    Run Code Online (Sandbox Code Playgroud)

    该代码产生以下输出:

    elemPtr = 3.42
    elemPtr = -6.25982e+18
    
    Run Code Online (Sandbox Code Playgroud)

    为什么在push_back之后会发生这种情况?我没有删除向量的第一个元素.它为什么会这样?

    我使用Clang编译器(Xcode).

    c++ vector stdvector

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

    带有派生对象的基类的std :: vector

    我有一个std::shared_ptr声明的deque有一个基类的deque(我们称之为Polygon),但我存储指向派生对象的指针(例如Triangle).我现在正在考虑将数据结构更改std::vector为使用向量确保相邻内存的事实但我在这里有几个问题:

    1)即使物体尺寸不同,这是否可行?或者可能发生由于派生对象大于它们将在内存中重叠的基础对象?

    2)存储std::shared_ptr我不会在内存中将它们完全放在一起只是指针是真的吗?还是我错了?

    谢谢

    c++ memory smart-pointers stdvector

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

    向量Push_Back VS Emplace_Back

    我有两种将向量元素添加到向量的方法。

    GUI_Vertices.emplace_back();
    
    GUI_Vertices.back().pos.x = ((float)x / 400) - 1.f;
    GUI_Vertices.back().pos.y = ((float)y / 300) - 1.f;
    GUI_Vertices.back().texCoord.x = u;
    GUI_Vertices.back().texCoord.y = v;
    GUI_Vertices.back().color.r = m_Color.r / 128;
    GUI_Vertices.back().color.g = m_Color.g / 128;
    GUI_Vertices.back().color.b = m_Color.b / 128;
    GUI_Vertices.back().color.a = m_Color.a / 128;
    
    Run Code Online (Sandbox Code Playgroud)

    上面的代码有效,但是我被迫向GUI_Vertices向量添加一个新元素。

    Vertex NewVertex;
    
    NewVertex.pos.x = ((float)x / 400) - 1.f;
    NewVertex.pos.y = ((float)y / 300) - 1.f;
    NewVertex.texCoord.x = u;
    NewVertex.texCoord.y = v;
    NewVertex.color.r = m_Color.r / 128;
    NewVertex.color.g = m_Color.g / 128;
    NewVertex.color.b = m_Color.b …
    Run Code Online (Sandbox Code Playgroud)

    c++ memory-management stdvector vulkan

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