标签: vector

取消引用访问元素的向量指针

如果我在C++中有一个指向向量的指针:

vector<int>* vecPtr;
Run Code Online (Sandbox Code Playgroud)

我想访问向量的一个元素,然后我可以通过去除向量来做到这一点:

int a = (*vecPtr)[i];
Run Code Online (Sandbox Code Playgroud)

但是这个解除引用会不会在堆栈上创建我的矢量副本?假设向量存储10000个int,是否会通过解除引用来复制vecPtr 10000 int?

谢谢!

c++ vector dereference

54
推荐指数
2
解决办法
7万
查看次数

如何通过不同的std :: vector的值对std :: vector进行排序?

我有几个std::vector,全长相同.我想对这些向量中的一个进行排序,并将相同的变换应用于所有其他向量.这样做有一个简洁的方法吗?(最好使用STL或Boost)?一些向量包含ints,其中一些包含std::strings.

伪代码:

std::vector<int> Index = { 3, 1, 2 };
std::vector<std::string> Values = { "Third", "First", "Second" };

Transformation = sort(Index);
Index is now { 1, 2, 3};

... magic happens as Transformation is applied to Values ...
Values are now { "First", "Second", "Third" };
Run Code Online (Sandbox Code Playgroud)

c++ sorting boost stl vector

53
推荐指数
3
解决办法
3万
查看次数

寻找类似C++ STL的矢量类,但使用堆栈存储

在我写自己之前,我会问你们所有人.

我正在寻找一个几乎完全像STL向量的C++类,但是将数据存储到堆栈中的数组中.某种类型的STL分配器类也可以工作,但我试图避免任何类型的堆,甚至是静态分配的每线程堆(尽管其中一个是我的第二选择).堆栈效率更高.

它需要几乎替代使用向量的当前代码.

对于我自己要写的东西,我在考虑这样的事情:

char buffer[4096];
stack_vector<match_item> matches(buffer, sizeof(buffer));
Run Code Online (Sandbox Code Playgroud)

或者类可以在内部分配缓冲区空间.然后它看起来像:

stack_vector<match_item, 256> matches;
Run Code Online (Sandbox Code Playgroud)

我认为如果空间不足,它会抛出std :: bad_alloc,尽管这不应该发生.

更新

使用Chromium的stack_container.h效果很好!

我之所以没想过这样做的原因是我总是忽略了STL集合构造函数的allocator对象参数.我已经使用了几次模板参数来做静态池,但是我从未见过代码或编写任何实际使用过对象参数的代码.我学到了新东西.很酷!

代码有点乱,由于某种原因,GCC强迫我将分配器声明为实际项而不是将其构造为vector的allocator参数.它来自这样的事情:

typedef std::pair< const char *, const char * > comp_list_item;
typedef std::vector< comp_list_item > comp_list_type;

comp_list_type match_list;
match_list.reserve(32);
Run Code Online (Sandbox Code Playgroud)

对此:

static const size_t comp_list_alloc_size = 128;
typedef std::pair< const char *, const char * > comp_list_item;
typedef StackAllocator< comp_list_item, comp_list_alloc_size > comp_list_alloc_type;
typedef std::vector< comp_list_item, comp_list_alloc_type > comp_list_type;

comp_list_alloc_type::Source match_list_buffer;
comp_list_alloc_type match_list_alloc( &match_list_buffer );
comp_list_type match_list( match_list_alloc );
match_list.reserve( comp_list_alloc_size ); …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector data-structures

53
推荐指数
5
解决办法
2万
查看次数

是否有sorted_vector类,它支持insert()等?

通常,使用排序std::vector而不是a 更有效std::set.有没有人知道一个库类sorted_vector,它基本上有一个类似的接口std::set,但插入元素到排序的矢量(所以没有重复),使用二元搜索find元素等?

我知道写起来并不难,但最好不要浪费时间并使用现有的实现.

更新:使用排序向量而不是集合的原因是:如果您有数十万个小集合,每个集合只包含10个左右的成员,那么使用排序向量代替更高内存效率.

c++ sorting stl vector set

53
推荐指数
3
解决办法
5万
查看次数

std :: vector,默认构造,C++ 11和重大变化

我今天跑了一个非常微妙的问题我希望得到你的意见.

考虑以下花园式共享体成语类:

struct S
{
    S() : p_impl(new impl) {}
private:
    struct impl;
    boost::shared_ptr<impl> p_impl;
};
Run Code Online (Sandbox Code Playgroud)

当您尝试以下列方式将它们放入向量时,会出现这种乐趣:

std::vector<S> v(42);
Run Code Online (Sandbox Code Playgroud)

现在,至少使用MSVC 8,所有元素v共享同一个impl成员.实际上,导致这种情况的原因是vector构造函数:

template <typename T, typename A = ...>
class vector
{
    vector(size_t n, const T& x = T(), const A& a = A());
    ...
};
Run Code Online (Sandbox Code Playgroud)

在这些场景中,只有一个S对象被默认构造,从中复制了它们的n元素vector.

现在,使用C++ 11,有rvalue引用.所以它不能像这样工作.如果a vector被构造为

std::vector<S> v(42);
Run Code Online (Sandbox Code Playgroud)

然后很可能,实现将选择默认构造n向量内的对象,因为复制构造可能不可用.在这种情况下,这将是一个突破性的变化.

我的问题是:

  1. C++ 03标准是否std::vector必须具有如上定义的构造函数,即.使用默认参数?特别是保证向量对象的条目被复制而不是默认构造?
  2. C++ 11标准对同一点有什么看法?
  3. 我认为这可能会导致C++ 03和C + 11之间发生重大变化.这个问题是否已被调查过?解决了 ?

PS:请不要评论 …

c++ stl vector backwards-compatibility c++11

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

如何从C++中指向向量的指针访问向量的内容?

我有一个指向矢量的指针.现在,我如何通过指针读取向量的内容?

c++ pointers vector

53
推荐指数
5
解决办法
19万
查看次数

从unordered_map获取键和值列表

vector从a获取键和值的列表(作为a )的最有效方法是unordered_map什么?

具体来说,假设有问题的地图是一个unordered_map<string, double>.然后我想把键作为a vector<string>,并将值作为a vector<double>.

unordered_map<string, double> um;

vector<string> vs = um.enum_keys();
vector<double> vd = um.enum_values(); 
Run Code Online (Sandbox Code Playgroud)

我可以遍历地图并收集结果,但是有更有效的方法吗?有一个方法也适用于常规地图会很好,因为我可能会切换到那个.

c++ unordered-map vector std c++11

53
推荐指数
2
解决办法
7万
查看次数

如何初始化结构上的向量向量?

如果我有一个NxN矩阵

vector< vector<int> > A;
Run Code Online (Sandbox Code Playgroud)

我应该如何初始化它?

我试过没有成功:

 A = new vector(dimension);
Run Code Online (Sandbox Code Playgroud)

既不是:

 A = new vector(dimension,vector<int>(dimension));
Run Code Online (Sandbox Code Playgroud)

c++ vector

53
推荐指数
2
解决办法
12万
查看次数

排序结构的矢量

我有一个vector<data> info地方data被定义为:

struct data{
    string word;
    int number;
};
Run Code Online (Sandbox Code Playgroud)

我需要info按字符串的长度排序.有一种快速简单的方法吗?

c++ sorting vector

52
推荐指数
3
解决办法
9万
查看次数

如何将矢量转换为R中的矩阵?

我有一个包含49个数值的向量.我希望有一个7x7数字矩阵.

我可以使用某种方便的自动转换语句,还是必须将7个单独的列分配正确的向量子集分配给新的矩阵?我希望有一些类似于oposite的东西c(myMatrix),当然可以选择给出我想要的行数和/或列数.

r vector matrix

52
推荐指数
2
解决办法
11万
查看次数