标签: stdvector

在这种情况下使用std :: vector的哪个构造函数

这看起来很简单,但我很困惑:我创建一个百矢量的方式,比方说,ints

std::vector<int>  *pVect = new std::vector<int>(100);
Run Code Online (Sandbox Code Playgroud)

但是,看看std :: vector的文档,我发现它的构造函数是形式的

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
Run Code Online (Sandbox Code Playgroud)

那么,前一个如何运作?是否new使用从默认构造函数获取的初始化值调用构造函数?如果是这样的话,会的

std::vector<int, my_allocator> *pVect = new std::vector<int>(100, my_allocator);
Run Code Online (Sandbox Code Playgroud)

我通过自己的分配器,也工作?

c++ stl stdvector

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

C++:std :: vector :: reserve在包含指针时不保留

当我std::vector::reserve在标识符属性时调用时std::vector<Foo*> reserve(...)什么都不做:

std::vector<int*> bar;
bar.reserve(20);

//I expect bar.size to return 20...
std::size_t sz = bar.size();
for(std::size_t i = 0; i < sz; ++i) {
    //Do Stuff to all items!
}
Run Code Online (Sandbox Code Playgroud)

前面提到的for循环运行正好零次,bar.size()返回零.我不记得所有其他STL容器是否也是如此,但如果是这样,包括std :: vector的行为:为什么?

c++ stdvector

7
推荐指数
3
解决办法
2039
查看次数

push_back()和resize(size()+ 1)之间有什么区别吗?

通过以下任一方式,可以扩展标准向量以容纳另一个成员:

std::vector<int> v;
v.push_back(1);
Run Code Online (Sandbox Code Playgroud)

要么

int os = v.size();
v.resize(os+1);
v[os] = 1;
Run Code Online (Sandbox Code Playgroud)

除了使用push_back()的代码的简洁性,还有其他差异吗?例如,一个比另一个更有效,还是在每种情况下分配不同的额外内存?

c++ stdvector

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

Vector Iterator:'operator ='不匹配

考虑下面第一个代码片段中的代码C++,我得到第二个代码段中指示的编译错误.看起来我在遍历矢量实例时做错了.你能告诉我如何克服这些编译问题吗?谢谢.代码中标记了LINE 171.

SNIPPET 1(代码)

#include <string>
#include <vector>
#include <iterator>

class VipAddressSetEntity : BaseEntity
{
public:
      VipAddressSetEntity() : BaseEntity() { }
      VipAddressSetEntity(std::string &uuid, std::string &name) : BaseEntity(uuid, name) { }

      VipAddressSetEntity(const VipAddressSetEntity &copyin)
      {
       setUUID(copyin.getUUID());
       setName(copyin.getName());

       std::vector<VipAddressEntity>::iterator iter;
               /* LINE 171 is the following*/
       for( iter = copyin.mVipAddressList.begin(); iter !=   copyin.mVipAddressList.end(); iter++ )
       {
                addVipAddress(*iter);
       }
      }

      VipAddressSetEntity operator = (const VipAddressSetEntity &rhs)
      {
        setUUID(rhs.getUUID());
        setName(rhs.getName());

        std::vector<VipAddressEntity>::iterator iter;
        for( iter = rhs.mVipAddressList.begin(); iter != rhs.mVipAddressList.end(); iter++ )
        {
                addVipAddress(*iter);
        } …
Run Code Online (Sandbox Code Playgroud)

c++ iterator stdvector

7
推荐指数
1
解决办法
9890
查看次数

我们如何在C++的类构造函数中初始化std :: vector?

我们如何在c ++中的类构造函数中初始化std :: vector?

class MyClass
{
public:
    MyClass( int p_Var1, int* p_Vector ) : Var1( p_Var1 ) //, Initialize std::vector - MyVector with p_Vector
    {
    };
    ~MyClass( void );
private:
    int Var1;
    std::vector< int > MyVector;
};
Run Code Online (Sandbox Code Playgroud)

c++ constructor stdvector

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

何时复制矢量,何时传递参考?

我正在使用一个充分利用它的程序std::vector.还有很多分配/解除分配,数十亿分配,我试图避免尽可能多的分配/解除分配.由于我对C++比较陌生,所以我在使用向量时会有一些关于分配的问题(例如,在向其添加元素时).我在Win7 64位机器上,程序是32位,我正在使用当前版本的MinGW编译器.

我想知道,在下列情况下会发生什么,即如果复制了矢量,作为参考传递,...

1.

std::vector<T> fillVector() {
    std::vector<T> returnVector;
    ...
    return returnVector;
}

std::vector<T> myVector = fillVector();
Run Code Online (Sandbox Code Playgroud)

2.

 std::vector<T>& fillVector() {
    std::vector<T>* returnVector = new std::vector<T>;
    ...
    return (*returnVector);
}

std::vector<T> myVector = fillVector();
Run Code Online (Sandbox Code Playgroud)

3.

std::vector<T>* fillVector() {
    std::vector<T>* returnVector = new std::vector<T>;
    ...
    return returnVector;
}

std::vector<T>* myVector = fillVector();
Run Code Online (Sandbox Code Playgroud)

以下是不同的操作:

4.

std::vector<T> myVector1;
... (myVector1 being filled)
std::vector<T> myVector = myVector1;
Run Code Online (Sandbox Code Playgroud)

5.

std::vector<T>* myVector1 = new std::vector<T>;
... (myVector1 being filled)
std::vector<T> myVector = (*myVector1);
Run Code Online (Sandbox Code Playgroud)

假设我不想改变 …

c++ stl stdvector

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

VHDL以十六进制初始化向量(长度不是4的倍数)

例如,我有一个长度为10的向量.如何以十六进制初始化它.(合成工具抱怨大小不匹配,因为它认为十六进制值是4的倍数)

signal v : std_logic_vector (9 downto 0)    := x"11A";
Run Code Online (Sandbox Code Playgroud)

非常感谢!泥工

initialization vhdl stdvector

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

如何在不制作副本的情况下将`std :: string`转换为`std :: vector <unsigned char>`?

我想调用一个库函数,其签名是:

bool WriteBinary(const std::vector<uint8_t> & DataToWrite);
Run Code Online (Sandbox Code Playgroud)

我有一个std::string变量,我想把它作为参数发送给它.

void WriteString(const std::string & TextData)
{
    // ...
    WriteBinary(TextData);  // <-- How to make this line work?
    // ...
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以直接发送std::string变量而无需复制它?

c++ casting stdstring stdvector

7
推荐指数
3
解决办法
1807
查看次数

通过移动将向量附加到另一个(前C++ 11)

我正在处理一些相对较大的整数向量,我有一个顶级向量,我需要累积其他(临时)向量的结果.

将它扩展到原地很遗憾,因为我收到了从另一个API预先烹饪的临时向量,并且由于同样的原因我坚持使用GCC 4.1.2,所以没有一个很好的移动语义或std :: move of C++ 11.

目前我正在使用insert进行复制,例如:

vector<int> accumulator;
for(){
    vector<int> tempVector = vectReturningFunction();
    ...
    if(!tempVector.empty()){
        accumulator.insert(accumulator.end(), tempVector.begin(), tempVector.end());
    }
}
Run Code Online (Sandbox Code Playgroud)

由于临时常规是一次性的,数据可以足够大,我希望能够移动而不是复制,但我无法找到一种优雅的方式来做到这一点.

任何解决方案甚至只是指针(没有双关语意图)在一个有用的方向将非常感激.几年前,我对Stroustrup前C++ 11读取配方有一个模糊的记忆,可以跨越STL容器,但是现在有很多C++ 11的东西,没有多少搜索服务.

谢谢.

c++ move stdvector

7
推荐指数
1
解决办法
877
查看次数

std :: vector默认构造函数是否可以抛出异常

如果我std::vector使用默认构造函数(和默认分配器)构造一个空,它可以抛出异常吗?

通常,为容器的元素分配空间可以抛出异常(这将是一个异常std::bad_alloc).但一个默认的构造函数std::vector并不需要分配任何这样的空间.它可以在第一次插入或赋值时懒惰地分配一些空间.但是C++标准是否要求它不会抛出异常(暗示延迟分配,或者捕获std::bad_alloc然后再回到延迟分配)?

c++ stdvector bad-alloc noexcept

7
推荐指数
1
解决办法
577
查看次数