标签: stdvector

使用擦除删除 std 向量的元素对象:a)内存处理和 b)更好的方法?

我有一个vec_A存储实例的实例class A:vec_A.push_back(A());

我想在稍后阶段删除向量中的一些元素,并有两个问题:a)元素被删除为:vec_A.erase(iterator) 是否需要添加任何其他代码以确保没有内存泄漏?。

b) 假设条件if(num <5)是num是否在特定的numberList中。鉴于此,是否有比我下面说明的更好的方法来删除向量的元素?

#include<vector>
#include<stdio.h>
#include<iostream>

class A {
      public:

             int getNumber();            
             A(int val);
             ~A(){};
      private:
              int num;
};

A::A(int val){
         num = val;
         };

int A::getNumber(){
    return num;
};

int main(){


    int i  =0;
    int num;
    std::vector<A> vec_A;
    std::vector<A>::iterator iter;

          for ( i = 0; i < 10; i++){
              vec_A.push_back(A(i));
          }
          iter = vec_A.begin();

          while(iter != vec_A.end()){
              std::cout <<  "\n --------------------------";
              std::cout <<  "\n Size before erase …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

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

如何使 std::vector&lt;T&gt; 使用现有的 T* 数组而不复制这些值?

我有一个std::vector<unsigned char>vec 和一个预分配的连续缓冲区(unsigned char),大小为(len),我知道它正在开始,存储在unsigned char*名为 的变量中start。我知道我可以将std::copy(start,start+len,vec.begin())它们复制到向量中,但是我可以在不复制的情况下做到这一点吗?我可以指向vec.begin()起始指针吗?我已经在内存中分配了所有值,并且我不想将它们复制到向量中,因为我有内存限制。

指针和长度是通过外部 API 提供给我的,所以我无法更改它。

c++ stdvector

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

如何更新 std::vector&lt;pair&lt;int, int&gt;&gt; 中最近输入的元素?

如何更新任何对类型向量类中对的值?

例子 :

V.push_back(make_pair(1, 3));
Run Code Online (Sandbox Code Playgroud)

如果我想更新3某件事5或某事,我该如何实现?

c++ stdvector c++11 std-pair c++17

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

如何将 std::initializer_list 分配给向量

这是一个需要 an 的构造函数std::initializer_list,我想将它分配给一个向量。我是否需要使用for-loop 将 中的每一项std::initializer_list逐一分配给向量?

Motor_Group::Motor_Group(std::initializer_list<pros::Motor> port_set)
{
  this->motor_vector = port_set;
}
Run Code Online (Sandbox Code Playgroud)

c++ stdvector stdinitializerlist

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

如何创建 emplace_back 方法?

I\xc2\xb4m 创建自定义 ArrayList/Vector 类,并且 I\xc2\xb4m 在创建 emplace_back 函数时遇到问题。如何创建与 ArrayList 的“value_type 类”的构造函数相同的参数?

\n

c++ arraylist push-back stdvector emplace

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

如何使用 CUDA 将 std::vector&lt;std::string&gt; 复制到 GPU 设备

我正在从文件中读取行,并希望通过 GPU 对每一行执行一些计算。

我面临的问题是,到目前为止,我曾经复制一个常量大小的 int 数组,现在我有一个字符串向量,每个字符串的大小都不同。我正在使用:

std::vector<std::string> lines;
Run Code Online (Sandbox Code Playgroud)

我使用了常量大小来复制数组。就像是:

err = cudaMemcpy(_devArr, tmp, count * sizeof(unsigned int) * 8, cudaMemcpyHostToDevice);
Run Code Online (Sandbox Code Playgroud)

但我不确定我是否完全了解它如何与向量一起工作。如何寻址和复制字符串向量?我可以以某种方式复制它并仍然像使用线程+块索引的数组一样访问它吗?

*使用最新的CUDA 10.2和CUDA RTX 2060显卡

c++ string cuda gpu stdvector

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

使用 range-for 循环以相反的顺序迭代向量?

我想以相反的顺序迭代一个向量,我知道我可以通过下面的代码轻松完成

#include<bits/stdc++.h>
using namespace std;
int main()
{
    vector<int> v(10);
    for(auto it=v.rbegin();it!=v.rend();it++)
        cout<<*it<<"";
}
Run Code Online (Sandbox Code Playgroud)

为了向前迭代,我们可以简单地通过下面的代码来完成。

for(auto it:v)
  cout<<it<<" ";
Run Code Online (Sandbox Code Playgroud)

现在的任务是...

是否可以进行类似于for(auto it:v) cout<<it<<" ". 如果是,那么如何?

c++ stl stdvector

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

有没有办法使用 nlohmann_json lib 序列化异构向量?

堆栈溢出社区大家好!

我正在开发一个大量使用有趣的nlohmann_json库的项目,似乎我需要在特定类上添加继承链接,该类对象会在某一时刻被序列化。

我尝试了在库的 github Issues 页面上找到的不同建议,但无法使其工作。

这是我尝试过的虚拟代码:

#include <nlohmann/json.hpp>

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

using json = nlohmann::json;

namespace nlohmann {
    template <typename T>
    struct adl_serializer<std::unique_ptr<T>> {
        static void to_json(json& j, const std::unique_ptr<T>& opt) {
            if (opt) {
                j = *opt.get();
            } else {
                j = nullptr;
            }
        }
    };
}

class Base {
    public:
        Base() = default;
        virtual ~Base() = default;
        virtual void foo() const { std::cout << "Base::foo()" << std::endl; }
};

class Obj : …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance stdvector unique-ptr nlohmann-json

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

vector 类如何接受多个参数并从中创建一个数组?

矢量示例

vector<int> a{ 1,3,2 }; // initialize vectors directly  from elements
for (auto example : a)
{
    cout << example << " ";   // print 1 5 46 89
}
MinHeap<int> p{ 1,5,6,8 };    // i want to do the same with my custom class   
Run Code Online (Sandbox Code Playgroud)

知道如何在大括号中接受多个参数并形成一个数组吗?

std::vectorclass 用于std::allocator分配内存,但我不知道如何在自定义类中使用它。 VS Code 显示std::allocator

我做了同样的事情,但它不像那样工作

template<typename T>
class MinHeap
{
    // ...
public:
    MinHeap(size_t size, const allocator<T>& a)
    {
        cout << a.max_size << endl;
    }
    // ...
};
Run Code Online (Sandbox Code Playgroud)

菜鸟在这里....

c++ stdvector class-template c++11 stdinitializerlist

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

如何在 std::variant 的向量中过滤掉某些数据类型的元素?

我有一个类型为或std::vector的std::variant元素。如果迭代元素的类型为 ,我想遍历这个向量和一个额外的项目。但是,似乎不允许在运行时查询索引。我怎样才能做到这一点?intstd::set<int>insertstd::set<int>

#include <variant>
#include <set>
#include <vector>

int main()
{
    using Variants = std::variant<int, std::set<int>>;

    std::vector<Variants> var_vec;
    var_vec.push_back(999);
    std::set<int> a = {0,1,2};
    var_vec.push_back(a);

    for (int i = 0; i < var_vec.size(); ++i)
    {
        // if the element var_vec[i] is of type std::set<int>
        if (var_vec[i].index() == 1) var_vec[i].insert(888);   // !ERROR! How to achieve this?
    }
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

error: '__gnu_cxx::__alloc_traits<std::allocator<std::variant<int, std::set<int, std::less<int>, std::allocator<int> > > >, std::variant<int, std::set<int, std::less<int>, std::allocator<int> > …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector stdset c++17 std-variant

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