std :: vector如何实现对不断变化的元素数量的管理:它是使用realloc()函数还是使用链表?
谢谢.
我应该更喜欢堆分配到堆分配.传递值更好(特别是如果你正在创建新对象 - 但同时,如果你通过基类返回,你的对象将被切片),或者至少通过引用而不是传递指针(尽管你不能创建引用向量).
我仔细阅读了所有这些内容,现在我觉得我对之前所了解的知之甚少.关于如何编写一个IMO应该是微不足道的代码,我并没有丝毫想法,同时尊重所有这些精心编写和思考的答案中提到的最佳实践.
这是我想要实现的.(我不假装它是正确的C++,但我只是想传达这个想法).
// This thing is purely virtual!
class BaseStuff { }
// Has important behaviour and data members that shouldn't be sliced
class SomeStuff : public BaseStuff { }
// Don't slice me plz
class OtherStuff : public BaseStuff { }
BaseStuff CreateStuff()
{
// falls a set of rules to create SomeStuff or OtherStuff instance based on phase of the moon
}
std::vector<BaseStuff> CreateListOfStuff()
{ …Run Code Online (Sandbox Code Playgroud) 我知道这个问题被问了一百万次.大多数答案只是说对象应该是CopyAssignable和CopyConstructible.但文档清楚地说这是规则(直到C++ 11)!但它仍然无效.为什么?
我创建了一些代码来重现问题:
#include "stdafx.h"
#include <iostream>
#include <vector>
class A
{
protected:
int m_X;
public:
A() {
std::cout << "in A ctor" << std::endl;
m_X = 0;
}
virtual void printX(){ std::cout << "in A " << m_X << std::endl; }
};
class B : public A
{
public:
B() {
std::cout << "in B ctor" << std::endl;
m_X = 1;
}
virtual void printX(){ std::cout << "in B " << m_X << std::endl; }
};
class As
{
public:
void …Run Code Online (Sandbox Code Playgroud) 我正在使用一些容器。参考向量存在问题,无法正常检测。
error C2039: 'vecMsg' : is not a member of 'std::_Vector_iterator <std::_Vector_val>std::_Simple_types<T2 &>>>'
Run Code Online (Sandbox Code Playgroud)
为什么无法识别成员变量?
vector<T1> vec1;
vector<T2> vec2;
vector<T1>::iterater iVec1;
vector<T2>::iterater iVec2;
vector<T2&>::iterater iInVec;
struct T1
{
public:
vector<T2&> inVec;
}
struct T2
{
public:
vector<std::string> vecMsg;
}
Run Code Online (Sandbox Code Playgroud)
在 vec1.inVec 中输入一些数据
for(iVec1 = vec1.begin(); iVec1 != vec1.end(); iVec1++)
{
for(iVec2 = vec2.begin(); iVec2 != vec2.end(); iVec2++)
{
// blaa if
iVec1->inVec.push_back(*iVec2);
}
}
Run Code Online (Sandbox Code Playgroud)
访问 vec1.inVec 中的 vecMsg
for(iVec1 = vec1.begin(); iVec1 != vec1.end(); iVec1++)
{
for(iInVec = iVec1->inVec.begin(); iInVec != …Run Code Online (Sandbox Code Playgroud) 在Python中,为了比较变量的类型,有一个函数“type”,例如:a = 10和b =“abc”,类型(a)!= 类型 (b)。C++中有类似的东西吗?我有一个基类对象向量,我想查看该向量的元素是否已声明为派生类。
这是C++ Primer第5版的练习:
练习16.45:给出以下模板,解释如果我们在文字值上调用g,如42,会发生什么.如果我们在类型为int的变量上调用g?P.690
template <typename T>
void g(T&& val)
{
std::vector<T> v;
}
int main()
{
//g(42);
int i;
g(i);
}
Run Code Online (Sandbox Code Playgroud)
在打电话时42,它编译了.
打开时i,编译器抱怨了很多错误,其中一部分粘贴如下.
forming pointer to reference type 'int&'
Run Code Online (Sandbox Code Playgroud)
我的问题是
在调用字面值时,42在这种情况下,推断出什么类型T?
什么时候开始i,为什么不编译?如何理解这些错误消息?
下面的代码不起作用,因为我将矢量a和b推回到矢量矢量,然后改变矢量a和b.我想改变矢量a和b,以便矢量矢量遭受相同的修改.我该怎么做呢?
#include <iostream>
#include <vector>
int main()
{
std::vector<std::vector<int>>vector;
std::vector<int>a;
std::vector<int>b;
vector.push_back(a);
vector.push_back(b);
for (int i = 1; i <= 10; i++)
a.push_back(i);
for (int i = 11; i <= 20; i++)
b.push_back(i);
std::cout << vector[1][0];
std::cin.get();
}
Run Code Online (Sandbox Code Playgroud) 我正在基于 LeetCode 练习实现 LRU 缓存,但以下代码无法编译
using namespace std;
class LRUCache {
private:
list<int> data;
unordered_map<int, list<int>::iterator&> keys_to_data;
void update_recency(int key, list<int>::iterator& it) {
data.erase(it);
data.push_front(key);
keys_to_data[key]; // issue here
}
public:
LRUCache(int capacity) {
}
int get(int key) {
int value = -1;
auto value_it = keys_to_data.find(key);
if(value_it != keys_to_data.end()) {
value = *(value_it->second);
update_recency(key, value_it->second);
}
return value;
}
void put(int key, int value) {
}
};
Run Code Online (Sandbox Code Playgroud)
/Library/Developer/CommandLineTools/usr/include/c++/v1/tuple:1360:7: 错误:对类型 'std::__1::__list_iterator' 的引用需要一个初始化器 Second(_VSTD::forward<_Args2>(_VSTD: :get<_I2>(__second_args))...) ^
...巨大的堆栈跟踪...
/Users/Paul/Desktop/int/main.cpp:17:21:注意:在成员函数 'std::__1::unordered_map &、std::__1::hash、std::__1::equal_to 的实例化中, …
我听说在C ++中不建议使用指针,但我不明白为什么。
我的问题是我想创建一个类对象向量来管理我的类。
vector<MyClass> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)
自然地,为了获得更好的性能,我应该使用类对象指针的向量吗?
vector<MyClass *> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)
也许可以创建类对象的引用向量?
vector<MyClass &> vectorOfClass;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
问题来自下面的代码:
vector<int &> one; //compile failed
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么代码无法编译。