我想检查一个元素是否存在于特定的向量位置,比如i,然后像v [i]一样访问它.你能让我知道我该怎么办?
谢谢.
可以使用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) 我std::vectors通过在开始时设置容量并使用push_back慢慢填充它们来使用一堆.大多数这些矢量将具有相同的大小(16个元素),尽管有些可能会变大.如果我push_back在最初为0和容量为16的向量上使用16次,我可以确定容量将在16之后正好是16 push_backs吗?
我有一个指针向量,我想删除,但迭代向量并调用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) 我的问题非常类似于如何在std :: vector中找到一个项目?但是,我想更进一步,假设我正在搜索的项目在向量中出现了几次,我也希望在向量中获得它的位置.例如,我拥有的矢量是[ 1 3 4 3 7],我要搜索的项目是3.然后项目的位置是1和3.使用该std::find函数,我只能在向量中获得它的第一个位置.有任何想法吗?
请考虑以下情形:
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)
以上哪种方法效率更高?为什么?是否有更高效的不同方法?
我有以下代码编译得很好:
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进行编译.
有没有宣布任何优势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?
这与如何将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) 我正在编写一组算法来创建一个简单的单元测试框架。用标题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)