javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

c ++-Arduino中的向量

我在Arduino上制作了“路标”矢量。 每个航路点都是一个对象。 Arduino显然将需要存储多个航点以进行航点导航。 但是,除了将这些航路点存储在标准的预编程数组中之外,用户还需要能够添加,删除航路点并四处移动。 不幸的是,Arduino没有提供矢量类型作为内置库。

我目前正在考虑两个选择:

  1. 在用于C ++'vector'?等对象的容器中,有人张贴了一个通用库。 它不包含任何索引删除或移动操作。 但是它确实包含一些内存管理策略。

  2. 我过去曾经使用过malloc,dealloc,calloc。 但是我一点都不喜欢这个选项,尤其是对于类。 但这在我的senario中是更好的选择吗?

哪一条是更好的选择?

trans by 2020-01-28T07:50:26Z

为什么std :: vector比std :: deque受欢迎得多?

可能重复:
为什么我更喜欢使用向量去双端

我很好奇为什么vectorvector受欢迎得多。Deque在查找上几乎一样有效,在插入上更高效(没有vector :: reserve),并允许在前面插入/删除。

Herb Sutter曾经建议,如果您想使用向量,则更喜欢使用双端队列(我在解释)。 但是,在最近有关编写现代C ++的演讲中,他再次强烈建议将vector作为默认容器。 根据我之前链接的GOTW,即使该标准也有类似的措辞。

是否存在这种差异的原因? 仅仅是vector更简单,更广为人知,还是出于技术原因? 还是vector只是一个更酷的名字..?

trans by 2020-01-26T05:22:26Z

c ++-从unordered_map获取键和值的列表

vector<string>获得键和值的列表(作为unordered_map<string, double>)的最有效方法是什么?

为了具体起见,假设所讨论的地图是unordered_map<string, double>。然后,我想以vector<string>的形式获取密钥,以vector<double>的形式获取值。

unordered_map<string, double> um;

vector<string> vs = um.enum_keys();
vector<double> vd = um.enum_values(); 

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

trans by 2020-01-26T05:12:25Z

数据结构-寻找类似C ++ STL的向量类,但使用堆栈存储

在写我自己的书之前,我会问大家。

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

它几乎需要替换使用矢量的当前代码。

对于我要写的自己,我在想这样的事情:

char buffer[4096];
stack_vector<match_item> matches(buffer, sizeof(buffer));

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

stack_vector<match_item, 256> matches;

我以为如果空间不足,它会抛出std :: bad_alloc,尽管那永远不会发生。

更新资料

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

我自己没有考虑过这样做的原因是,我一直忽略了STL集合构造函数的allocator对象参数。 我已经多次使用template参数来进行静态池,但是我从未见过代码或编写任何实际使用object参数的代码。 我学到新东西。 很酷!

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

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);

对此:

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 );

每当我声明一个新的时,我都必须重复一遍。 但这就像我想要的那样工作。

我注意到stack_container.h定义了StackVector,我尝试使用它。 但是它不会从vector继承或定义相同的方法,因此它不是直接替代。 我不想使用向量重写所有代码,所以我放弃了。

trans by 2020-01-25T08:54:18Z

c ++-容量是否以矢量形式复制?

采取以下代码:

std::vector<int> a;
a.reserve(65536);
std::vector<int> b(a);  //NOTE: b is constructed from a

a.reserve(65536); // no reallocation
b.reserve(65536);

是否复制了容量? 最后一行会重新分配吗? 标准对此有何规定还是保持沉默?

trans by 2020-01-21T13:11:01Z

C ++-对结构向量进行排序

这个问题已经在这里有了答案:

  • 对自定义对象的向量进行排序                                     13个答案

我有一个info,其中data定义为:

struct data{
    string word;
    int number;
};

我需要按字串的长度对info进行排序。 有没有一种快速简单的方法来做到这一点?

trans by 2020-01-18T12:48:50Z

c ++-创建矩阵的向量的向量

我正在尝试输入2D矩阵的尺寸。 然后使用用户输入来填写此矩阵。 我尝试执行此操作的方式是通过向量(向量的向量)。 但是,每当我尝试读入数据并将其附加到矩阵时,都会遇到一些错误。

//cin>>CC; cin>>RR; already done
vector<vector<int> > matrix;
for(int i = 0; i<RR; i++)
{
    for(int j = 0; j<CC; j++)
    {
    cout<<"Enter the number for Matrix 1";
         cin>>matrix[i][j];
    }
}

每当我尝试执行此操作时,都会给我下标超出范围的错误。 有什么建议吗?

trans by 2020-01-16T19:04:45Z

C ++-std :: vector,默认构造,C ++ 11和重大更改

我今天遇到一个非常微妙的问题,我想请您发表意见。

考虑以下花园品种共享体习语类:

struct S
{
    S() : p_impl(new impl) {}
private:
    struct impl;
    boost::shared_ptr<impl> p_impl;
};

当您尝试通过以下方式将它们放入向量中时,会很有趣:

std::vector<S> v(42);

现在,至少使用MSVC 8,S中的所有元素都共享相同的n成员。 实际上,导致此问题的原因是vector构造函数:

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

在场景下,仅默认构造了一个S对象,并从其中复制了vectorn元素。

现在,在C ++ 11中,有右值引用。 因此它不能像这样工作。 如果将S构造为

std::vector<S> v(42);

那么最有可能的是,实现可能会选择默认在向量内部构造S对象,因为复制构造可能不可用。 在这种情况下,这将是一个重大变化。

我的问题是:

  1. C ++ 03标准是否要求S必须具有上面定义的构造函数,即。 带有默认参数? 特别是,可以保证矢量对象的条目被复制而不是默认构造的吗?
  2. 关于这一点,C ++ 11标准怎么说?
  3. 我认为这是在C ++ 03和C + 11之间进行重大更改的可能性。 这个问题已经调查过了吗? 解决了 ?

PS:请不要对上面的类S的默认构造函数发表评论。 正是这种或实施某种形式的惰性构造。

trans by 2020-01-14T15:13:57Z

我如何按不同的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" };
trans by 2020-01-14T13:50:44Z

有一个sorted_vector类,它支持insert()等?

通常,使用排序后的std::vector而不是std::set更为有效。有人知道一个库类sorted_vector,该类基本上具有与std::set类似的接口,但是将元素插入排序后的向量中(这样就不会有重复项),使用 二进制搜索到find元素等?

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

更新:使用排序向量而不是集合的原因是:如果您有成千上万个包含仅10个左右成员的小集合,那么仅使用排序向量会更节省内存。

trans by 2020-01-12T10:52:49Z

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

我有一个带有49个数值的向量。 我想改用7x7的数字矩阵。

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

trans by 2020-01-11T23:00:21Z

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

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

trans by 2020-01-08T14:15:39Z

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

这个问题已经在这里有了答案:

  • 使用boost指定初始化具有固定大小的向量的向量                                     4个答案

如果我有NxN矩阵

vector< vector<int> > A;

我应该如何初始化它?

我试过没有成功:

 A = new vector(dimension);

都不:

 A = new vector(dimension,vector<int>(dimension));
trans by 2020-01-05T10:11:26Z

stl-使用C ++ vector :: insert()添加到结尾

我正在编写一小段代码,根据矢量元素中的值,必须在某个位置将值插入C ++ STL矢量中。 我正在使用insert()函数来完成此操作。 我意识到,当我想在向量的末尾添加一个新元素时,我可以简单地使用push_back()。但是为了使我的代码看起来更好,我想专门使用insert(),它将迭代器指向 所需插入点和要插入的值之后的元素。 如果作为参数传入的迭代器的值为v.end()(其中v是我的向量),那么该工作原理是否与push_back()相同?

非常感谢!

trans by 2020-01-04T08:52:08Z

在Clojure中添加到向量的惯用方式是什么?

放在列表前面很容易:

user=> (conj '(:bar :baz) :foo)
(:foo :bar :baz)

附加到向量很容易:

user=> (conj [:bar :baz] :foo) 
[:bar :baz :foo]

在取回向量的同时,我如何(习惯上)添加到向量?这不起作用,因为它返回一个seq,而不是一个向量:

user=> (cons :foo [:bar :baz])     
(:foo :bar :baz)

这很丑(IMVHO):

user=> (apply vector (cons :foo [:bar :baz])) 
[:foo :bar :baz]

注意:我基本上只是想要一个可以附加和前置的数据结构。 附加到较大的列表应该对性能造成较大的影响,因此我想到了矢量。

trans by 2019-12-29T21:59:59Z

C ++-将元素插入特定位置

我想将元素插入向量的特定位置,我可以只使用赋值:

// vec1 and 2 have the same length & filled in somehow
vec1;
vec2;

vec1[i] = vec2[i] // insert vec2[i] at position i of vec1

或者我必须使用insert():

vector<sometype>::iterator iterator = vec1.begin();

vec1.insert(iterator+(i+1), vec2[i]);
trans by 2019-12-29T12:24:12Z

将R向量转换为1个元素的字符串向量

这个问题已经在这里有了答案:

  • 连接字符串/字符的向量                                     5个答案

我现在正在使用编程语言R。我有一个向量:

a <- c("aa", "bb", "cc")

我想将它们粘贴到系统命令中,现在我以这种方式尝试:

args <- paste(a, sep=" ")
system(paste("command",args, sep=" "))

但是现在我只得到参数aa,而我想要参数aa,bb和cc ...

有人知道我在做什么错吗?

trans by 2019-12-27T05:16:11Z

for循环-每个C ++,从矢量元素中提取

我正在尝试对攻击向量进行一次攻击,每次攻击都有一个唯一的ID,例如1-3。

class方法采用1-3的键盘输入。

我正在尝试使用一个foreach来遍历m_attack中的元素,以查看数字是否匹配,如果匹配,请执行某些操作。

我看到的问题是这样的:

a'for each' statement cannot operate on an expression of type "std::vector<Attack

我是要完全解决这个问题吗,我有C#经验并且是我基于此的,任何帮助都将不胜感激。

我的代码如下:

在标题中

vector<Attack> m_attack;

在班上

int Player::useAttack (int input)
{

    for each (Attack* attack in m_attack) // Problem part
    {  
        //Psuedo for following action
        if (attack->m_num == input)
        {
            //For the found attack, do it's damage
            attack->makeDamage();
        }
    }
}
trans by 2019-12-24T10:49:44Z

可以假设STL向量存储始终是连续的吗?

如果您有一个已调整大小的STL向量,是否可以安全地获取元素0的地址并假定其余向量将在内存中跟随?

例如

vector<char> vc(100);
// do some stuff with vc
vc.resize(200);
char* p = &vc[0];
// do stuff with *p
trans by 2019-11-15T00:29:21Z

为什么使用QVector(Qt)而不是std ::

我是C ++和Qt的新手,但是我擅长C#/ Java。

关键是我喜欢跨平台,但是我对Qt感到困惑。 File是否已跨平台,Qt是否提供了与非跨平台等效的功能?

另外FileQFile有何不同?

一个链接会很好,谢谢:)

trans by 2019-11-14T08:00:56Z

1 2 3 4 5 6 下一页 共6页