标签: stdvector

检查c ++ STL向量中是否存在特定元素

我想检查一个元素是否存在于特定的向量位置,比如i,然后像v [i]一样访问它.你能让我知道我该怎么办?

谢谢.

c++ stdvector

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

C++:使用二维C数组构造std :: vector <std :: vector <int >>?

可以使用C数组构造std :: vector,如下所示:std::vector<int> vec(ary, ary + len).构建一个正确的方法是std::vector<std::vector<int> >什么?

我一直在通过手动将每个元素复制到向量中来强制解决问题,显然这不是意图,但它有效.

int map[25][18] = { /*...DATA GOES HERE...*/ }
std::vector<std::vector<int> > m(18, std::vector<int>(25, 0));
for(int y = 0; y < 18; ++y) {
    for(int x = 0; x < 25; ++x) {
        m[y][x] = map[y][x];
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays stdvector

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

vector :: push_back何时增加容量?

我std::vectors通过在开始时设置容量并使用push_back慢慢填充它们来使用一堆.大多数这些矢量将具有相同的大小(16个元素),尽管有些可能会变大.如果我push_back在最初为0和容量为16的向量上使用16次,我可以确定容量将在16之后正好是16 push_backs吗?

c++ stdvector

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

快速删除指针STL向量的条目

我有一个指针向量,我想删除,但迭代向量并调用delete每个元素是非常慢的.有更快的方法吗?

不幸的是我真的需要存储指针,因为我使用虚拟超类.简化,类结构看起来像这样:

class VirtualSuperClass
{
protected:
    SomeType m_someMember;
    // ...
public:
    virtual void doSomething() = 0;
};

class Subclass_1 : public VirtualSuperClass
{
protected:
    SomeType m_someSubclassMember;
    // ...
public:
    virtual void doSomething() { /* do something*/ }
};

class Subclass_2 : public VirtualSuperClass
{
protected:
    SomeType m_someOtherSubclassMember;
    // ...
public:
    virtual void doSomething() { /* do something else*/ }
}
Run Code Online (Sandbox Code Playgroud)

在我的main方法中,我填充了超类的指针向量,并doSomething()为每个元素调用函数.

int main()
{
    std::vector<VirtualSuperClass*> vec;
    vec.push_back(new Subclass_1());
    vec.push_back(new Subclass_2());
    vec.push_back(new Subclass_2());
    vec.push_back(new Subclass_1());
    // and …
Run Code Online (Sandbox Code Playgroud)

c++ pointers stl vector stdvector

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

如何在std :: vector中查找项的位置

我的问题非常类似于如何在std :: vector中找到一个项目?但是,我想更进一步,假设我正在搜索的项目在向量中出现了几次,我也希望在向量中获得它的位置.例如,我拥有的矢量是[ 1 3 4 3 7],我要搜索的项目是3.然后项目的位置是1和3.使用该std::find函数,我只能在向量中获得它的第一个位置.有任何想法吗?

c++ std stdvector

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

连接两个std :: vector - 哪种方法更有效,怎么/为什么?

请考虑以下情形:

std::vector<int> A;
std::vector<int> B;
std::vector<int> AB;
Run Code Online (Sandbox Code Playgroud)

我希望AB有相同顺序A的内容和内容B.

方法1:

AB.reserve( A.size() + B.size() ); // preallocate memory
AB.insert( AB.end(), A.begin(), A.end() );
AB.insert( AB.end(), B.begin(), B.end() );
Run Code Online (Sandbox Code Playgroud)

方法2:

std::vector<int> AB ( A.begin(), A.end() ); // calling constructor
AB.insert ( AB.end(), B.begin(), B.end() );
Run Code Online (Sandbox Code Playgroud)

以上哪种方法效率更高?为什么?是否有更高效的不同方法?

c++ performance concatenation stdvector

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

MSVS 2015:vector <bool>没有'data'成员

我有以下代码编译得很好:

void foo::bar(const vector<int> arg) {
    int* ptr = arg.data();
    // do something with ptr
}
Run Code Online (Sandbox Code Playgroud)

我需要重载此函数 vector<bool>

void foo::bar(const vector<bool> arg) {
    int* ptr = arg.data(); 
    // error C2039: 'data': is not a member ofstd::vector<bool,std::allocator<_Ty>>'
    // do something with ptr
}
Run Code Online (Sandbox Code Playgroud)

vector<bool>没有data()会员的原因是什么?

在这里(en.cppreference.com)我没有找到一些特定的bool案例std::vector.

该代码使用MSVS 2015进行编译.

c++ std stdvector c++11 visual-studio-2015

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

什么时候有人将std :: vector定义为thread_local?

有没有宣布任何优势std::vector的thread_local?喜欢

static unique_ptr<std::vector<ObjectA>> vecVariable;
Run Code Online (Sandbox Code Playgroud)

声明std::vector为thread_local不会使其操作像pop_back()和erase()同步.

由于在每一个STL容器,如果有一个线程修改的容器,然后应无并发线程读取或写入同一容器中,所以我不能做erase()和pop_back()一对vector在并行/多线程环境中的对象.

即使我将vector声明为thread_local,我的代码也会在其中一个操作中崩溃.我知道我可能需要在锁定下执行这些操作,但我只是想了解何时有人会定义std::vector为thread_local?

c++ multithreading vector thread-local stdvector

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

如何将vector <string>转换为vector <char*>

这与如何将vector <char*>转换为vector <string>/string问题相反.

我有一些遗留的例程,vector<char*>所以我需要转换我的vector<string>.

这是我提出来的:

std::vector<char*> charVec(strVec.size(),nullptr);
for (int i=0; i<strVec.size();i++) {
    charVec[i]= new char(strVec[i].size()+1); 
    charVec[i][strVec[i].copy(charVec[i], strVec[i].size())] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

它是否正确?

有没有更好的方法来实现它?


ps当然最后我有:

for (int i=0; i<strVec.size();i++) {
    delete charVec[i];
}
Run Code Online (Sandbox Code Playgroud)

c++ stl char stdvector

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

如何创建抽象数据类型的模板类?

我正在编写一组算法来创建一个简单的单元测试框架。用标题UnitTest为strng描述正在执行的测试的字符串的实例化名为的类。数据类型也在对象实例化时传递,这使编译器可以知道正在传递哪些数据类型。的main.cpp文件和unit_test.hpp文件显示在下面

// main.cpp file
#include <iostream>
#include <string>
#include <vector>
#include <array>
#include "unit_test.hpp"

int main(int argc, const char * argv[]) {
    std::vector<int> array_one = {1, 2, 3, 4};
    std::vector<float> array_two = {0.99, 1.99, 2.99, 3.99};

    std::string c ("Vector Test");
    UnitTest<int, float> q(c);
    double unc = 0.1;
    q.vectors_are_close(array_two, array_four, unc);
    return 0;
}

// unit_test.hpp file
#ifndef unit_test_hpp
#define unit_test_hpp
#endif /* unit_test_hpp */
#include <string>
#include <typeinfo>
#include <iostream>
#include <cmath> …
Run Code Online (Sandbox Code Playgroud)

c++ templates class stdvector c++17

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